所以我得到以下代码函数来在控制台读取字符串输入:
func input() -> String {
let keyboard = NSFileHandle.fileHandleWithStandardInput()
let inputData = keyboard.availableData
return NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String
}
我遇到的问题很有意思。我正在尝试获取结果字符串输入并将其转换为double。
//Accept user-input which is string then case into Double value for cakeLength
print("Please enter the length of the cake (in): ")
var userText = input()
cakeLength = Double(userText)!
由于一些奇怪的原因,Xcode告诉我打开Double(userText)部分。但是,当我尝试在控制台上运行代码时,我收到一个运行时错误,指出:“致命错误:在展开Optional值时意外发现nil”
我做错了什么?我对使用Swift进行编程非常陌生。
答案 0 :(得分:0)
首先,您不需要这么复杂的功能来从控制台读取输入。 <{3}}中的readLine()
函数可以很好地为您完成此任务。
其次,你强制解开可选值(使用!
),你不知道解包会成功。
这是一个使用Swifts Standard Library语法的小例子,它可以让你检查是否有一个有效的输入,并检查输入是否可以强制转换为Double:
import Foundation
print("Please enter the lenght of the cake (in):")
if let inputString = readLine(), inputDouble = Double(inputString) {
print("The cake is \(inputDouble) inches")
} else {
print("Your input couldn't be converted to a double")
}
readLine()
和Double()
都返回选项(因为它们可能不会成功),因此您需要在使用前解包它们,并处理它们为零的情况。 if let
语句是为此目的而设计的。