Я не спрашиваю, являются ли эти расширения хорошей идеей или нет, это всего лишь мысленный эксперимент, который я пытаюсь извлечь из практики.Идиоматический способ тестирования Быстрые опции
Соглашаясь с Леттнер, что методы, как правило, предпочтительнее, я думал, что играть с возможность выразить:
someVariable.isNil
и
someVariable.notNil
Реализация его, я обнаружил любопытный если одна или другая из следующих реализаций была предпочтительнее другой и по каким причинам? Был бы более эффективен, чем другие. Будут ли краевые случаи лучше, так или иначе.
Решение 1:
extension Optional {
var isNil:Bool {
switch self {
case .None:
return true
case .Some:
return false
}
}
var notNil:Bool {
switch self {
case .None:
return false
case .Some:
return true
}
}
}
Решение 2:
extension Optional {
var isNil:Bool {
return self == nil
}
var notNil:Bool {
return self != nil
}
}
Нет необходимости в переменной notNil, вы можете как пользователь (iVar.isNil) вместо iVar.notNil, это удалит еще одно вычисленное свойство notNil –