什么是最常用的方式= = nil in swift?

时间:2017-06-18 18:37:37

标签: swift while-loop null idiomatic

这是我在快速Tic Tac Toe项目中的一段代码。

var inputTuple = readPositionsFromUser()

while inputTuple == nil {
    print()
    print("Pay attention!")
    print()
    sleep(1)
    inputTuple = readPositionsFromUser()
}

let (row, col) = inputTuple!

ReadPositionsFromUser()要求用户输入行和列,并返回nil,除非它可以正好解析两个Ints,并且那些Ints在Tic Tac Toe板的范围内。

我想知道是否有更惯用的方式来做这件事,因为最后一行中的!感觉有点不必要;如果已达到代码的那一点,那么我知道InputTuple不是nil,因此使用!似乎很愚蠢。

编辑:我觉得我应该澄清这是一个跨平台的命令行应用。我没有使用Cocoa或类似的东西。

1 个答案:

答案 0 :(得分:4)

Swift编译器可能足够聪明(在优化发布版本时)以识别inputTuple在上一个语句中不能为零。

但是如果你想要消除它,你可以将循环包装在一个返回一个非可选元组的函数中。您甚至可以使用内联闭包,如下所示:

let (row, col): (Int, Int) = {
    while true {
        if let inputTuple = readPositionsFromUser() { return inputTuple }
        print("\nPay attention!\n")
        sleep(1)
    }
}()

print("row=\(row) col=\(col)")