我不是在问这些扩展是否是一个好主意,它只是一个思想实验,我试图从实践中学习。
与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
}
}
答案 0 :(得分:0)
我不确定这些方法有多么有用,但它们是讨论的良好起点。
看一下Optional的当前实现:
在顶部附近,您可以看到它自己最原始的表示形式使用.None和.Some。所以 Solution 1 是最直接的方法,开销最小,并遵循Optional本身实现中使用的模式。我说这算是惯用的。
使用operator ==
只会增加不必要的间接,甚至不会像你提出的那样工作。