我的代码尝试读取双重问题

时间:2016-01-31 01:03:07

标签: ios swift

所以我得到以下代码函数来在控制台读取字符串输入:

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进行编程非常陌生。

1 个答案:

答案 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语句是为此目的而设计的。