为啥这行得通(不使用与使用选项)?
Posted
技术标签:
【中文标题】为啥这行得通(不使用与使用选项)?【英文标题】:Why does this work (not using vs. using optionals)?为什么这行得通(不使用与使用选项)? 【发布时间】:2014-06-08 18:41:44 【问题描述】:为什么下面的alternative1可以完美运行?
这些宏当然是伪造的,仅用于说明目的:
func commonPrefixLength<T: Swift.Collection, U: Swift.Collection where
T: Sequence, U: Sequence,
T.GeneratorType.Element: Equatable,
T.GeneratorType.Element == U.GeneratorType.Element>
(collection1: T, collection2: U) -> T.IndexType.DistanceType
var collection2generator = collection2.generate()
var i: T.IndexType.DistanceType = 0
for element1 in collection1
#if alternative1
let element2 = collection2generator.next()
if (element1 != element2)
return i
#elseif alternative2
let optionalElement2 = collection2generator.next()
if let element2 = optionalElement2
if (element1 != element2)
return i
else
break
#endif
i++
return i
commonPrefixLength("abX", "abc")
Here is a gist of the above.
【问题讨论】:
【参考方案1】:在比较中,您将可选 (element2
) 与非可选 (element1
) 进行比较。
if (element1 != element2)
return i
比较可选和非可选没有问题。为什么应该有?如果element2
是nil
,那么上面比较的结果就是true
。这定义得很好。
非可选项可以隐式转换为可选项,否则您将无法将非可选项分配给可选项。
let nonOptional = ""
var optional: String? = nonOptional
【讨论】:
以上是关于为啥这行得通(不使用与使用选项)?的主要内容,如果未能解决你的问题,请参考以下文章