为啥这行得通(不使用与使用选项)?

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

比较可选和非可选没有问题。为什么应该有?如果element2nil,那么上面比较的结果就是true。这定义得很好。

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

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

【讨论】:

以上是关于为啥这行得通(不使用与使用选项)?的主要内容,如果未能解决你的问题,请参考以下文章

将 node-sass 监视选项与 npm run-script 一起使用

为啥这行得通?方法重载+方法覆盖+多态

为啥这行得通?不合逻辑的数组访问

为啥这行得通?我无法理解这种交换的逻辑

不区分大小写的属性标志与 :visible 选择器一起使用

为啥在入口点 url 中添加项目名称时出现 404