为什么下面的替代品1能够完美运作?
宏当然是虚假的,仅用于说明目的:
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")
答案 0 :(得分:1)
在比较中,您将可选(element2
)与非可选(element1
)进行比较。
if (element1 != element2) {
return i
}
将可选项与非可选项进行比较没有问题。为什么会这样?如果element2
为nil
,则上述比较结果为true
。这很明确。
非期权可以隐式转换为期权,否则您将无法为可选项分配非期权。
let nonOptional = ""
var optional: String? = nonOptional