Swift可选链接是否从左到右延迟评估?

时间:2016-05-05 03:14:49

标签: swift optional optional-chaining

文档似乎没有提及关于可选链接评估顺序的任何明确说明,只是:

  

多个查询可以链接在一起,如果链中的任何链接为零,整个链都会正常失败。

可能看起来很明显,但我需要确切地确认发生了什么,并认为它可能对其他人有帮助。例如我们能安全地做这种事吗?

    opVar?.someObject.someMethod(opVar!)

1 个答案:

答案 0 :(得分:2)

可选链从左到右按照您的预期进行延迟评估。链失败的第一个选项会阻止对链的任何进一步评估。

// Playground test for left-to-right lazy evaluation.
struct C {
    static var i = 0
    func chain(count: Int) -> C? {
        print("Expected \(count) -> \(C.i)")
        assert(count == C.i)
        C.i += 1
        return C.i > 2 ? nil : self
    }
}

let c = C()
c.chain(0)?.chain(1)?.chain(2)?.chain(3)!.chain(4)!

输出

Expected 0 -> 0
Expected 1 -> 1
Expected 2 -> 2