很抱歉,如果这是一个基本问题,但我正在学习Swift,我不明白如何从readLine()
打开输入。
例如,我希望这个
let n: Int = Int(readLine(strippingNewline: true) ?? -1)
工作,但事实并非如此。也不会将-1
替换为"-1"
以匹配类型。
let n: Int = Int(readLine(strippingNewline: true) ?? "-1")
这样做的“正确”方法是什么?当有人解开选项并将它们用作Int
之类的构造函数的参数时,有人能解释一下Swift究竟在做什么吗?
选项的整个概念对我来说有点陌生(Python程序员);在Python中你处理无效的输入“贫民窟的方式”,只有在它们发生之后才发射:
try:
n = int(input())
except ValueError:
n = None
但我认为Swift中的范例是不同的。
答案 0 :(得分:1)
这里有两个选项。
首先,readLine(strippingNewline: true)
是可选的。如果在收到nil
(End of File
)字符之前没有收到任何输入,则可以返回EOF
。它必须在被传递到Int()
其次,Int()
是可选的,因为它给出的String
可能不是数字的有效字符串表示。
不要在Swift中使用-1
来表示“没有价值”。这被称为哨兵值,它正是阻止发明的选项。如何区分-1
含义“无/无效输入”和-1
意思是“用户的输入是-1
?
以下是我编写此代码的方法:
guard let userInput = readLine(strippingNewline: true) else {
// If we got to here, readLine(strippingNewLine:) returned nil
fatalError("Received EOF before any input was given")
}
// If we got to here, then userInput is not nil
if let n = Int(userInput) {
// If we got to here, then userInput contained a valid
// String representation of an Int
print("The user entered the Int \(n)")
}
else {
// If we got to here, then userInput did not contain a
// valid String representation of an Int.
print("That is not a valid Int.")
}