我不是在问这些扩展是否是一个好主意,这只是一个思想实验,我试图从实践中学习。
同意克里斯蒂安·拉特纳(Christian Lattner)的观点,这种方法通常更可取,我想我会尝试能够表达:
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
}
}