测试 Swift 选项的惯用方法
Idiomatic way to test Swift Optionals
我不是在问这些扩展是否是个好主意,这只是一个思想实验,我正在尝试从实践中学习。
同意 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
}
}
我不确定这些方法有多大用处,但它们是讨论的一个很好的起点。
看看Optional的当前实现:
靠近顶部,您可以看到它自己最原始的表示使用.None 和.Some。所以解决方案 1 是最直接的方法,开销最少,并且遵循 Optional 本身的实现中使用的模式。我会说这算作惯用语。
使用 operator ==
只会增加不必要的间接访问,甚至无法按照您提供的方式工作。
我不是在问这些扩展是否是个好主意,这只是一个思想实验,我正在尝试从实践中学习。
同意 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
}
}
我不确定这些方法有多大用处,但它们是讨论的一个很好的起点。
看看Optional的当前实现:
靠近顶部,您可以看到它自己最原始的表示使用.None 和.Some。所以解决方案 1 是最直接的方法,开销最少,并且遵循 Optional 本身的实现中使用的模式。我会说这算作惯用语。
使用 operator ==
只会增加不必要的间接访问,甚至无法按照您提供的方式工作。