为什么这样做(不使用与使用选项)?

时间:2014-06-08 18:41:44

标签: swift optional-values

为什么下面的替代品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")

Here is a gist of the above.

1 个答案:

答案 0 :(得分:1)

在比较中,您将可选(element2)与非可选(element1)进行比较。

if (element1 != element2) {
    return i
}

将可选项与非可选项进行比较没有问题。为什么会这样?如果element2nil,则上述比较结果为true。这很明确。

非期权可以隐式转换为期权,否则您将无法为可选项分配非期权。

let nonOptional = ""
var optional: String? = nonOptional