在 swift 中执行 while == nil 的最惯用的方法是什么?
What's the most idiomatic way to do a while == nil in swift?
这是我在 swift Tic Tac Toe 项目中的一段代码。
var inputTuple = readPositionsFromUser()
while inputTuple == nil {
print()
print("Pay attention!")
print()
sleep(1)
inputTuple = readPositionsFromUser()
}
let (row, col) = inputTuple!
ReadPositionsFromUser()
要求用户输入行和列,而 returns nil 除非它可以准确地解析两个 Ints
,并且那些 Ints
在范围内井字棋盘。
我想知道是否有更惯用的方法来做到这一点,因为最后一行的 !
感觉有点不必要;如果已经达到代码的那个点,那么我知道 InputTuple 不是零,因此使用 !
似乎很愚蠢。
编辑: 我觉得我应该澄清这是一个跨平台的命令行应用程序。我没有使用 Cocoa 或类似的东西。
Swift 编译器可能足够聪明(在优化发布版本时)识别出 inputTuple
不能在你最后的语句中为 nil。
但是如果你想消除它,你可以将循环包装在一个 returns 非可选元组的函数中。您甚至可以使用内联闭包,如下所示:
let (row, col): (Int, Int) = {
while true {
if let inputTuple = readPositionsFromUser() { return inputTuple }
print("\nPay attention!\n")
sleep(1)
}
}()
print("row=\(row) col=\(col)")
这是我在 swift Tic Tac Toe 项目中的一段代码。
var inputTuple = readPositionsFromUser()
while inputTuple == nil {
print()
print("Pay attention!")
print()
sleep(1)
inputTuple = readPositionsFromUser()
}
let (row, col) = inputTuple!
ReadPositionsFromUser()
要求用户输入行和列,而 returns nil 除非它可以准确地解析两个 Ints
,并且那些 Ints
在范围内井字棋盘。
我想知道是否有更惯用的方法来做到这一点,因为最后一行的 !
感觉有点不必要;如果已经达到代码的那个点,那么我知道 InputTuple 不是零,因此使用 !
似乎很愚蠢。
编辑: 我觉得我应该澄清这是一个跨平台的命令行应用程序。我没有使用 Cocoa 或类似的东西。
Swift 编译器可能足够聪明(在优化发布版本时)识别出 inputTuple
不能在你最后的语句中为 nil。
但是如果你想消除它,你可以将循环包装在一个 returns 非可选元组的函数中。您甚至可以使用内联闭包,如下所示:
let (row, col): (Int, Int) = {
while true {
if let inputTuple = readPositionsFromUser() { return inputTuple }
print("\nPay attention!\n")
sleep(1)
}
}()
print("row=\(row) col=\(col)")