我正在尝试获取下面的代码,以允许我在控制台中输入Accept或Reject;但是在线“if var userData = fileHandle.availableData {”我得到了错误
条件绑定中的绑定值必须是可选类型
func input() -> String {
var fileHandle = NSFileHandle.fileHandleWithStandardInput()
println("Accept or Reject")
if var userData = fileHandle.availableData{
var userString = NSString(data: userData, encoding: NSUTF8StringEncoding)
println("You have been \(userString)")
}
}
input()
答案 0 :(得分:7)
错误告诉您userData
必须属于可选类型。但fileHandle.availableData
会返回不属于可选类型的NSData
。所以你必须让它成为可选的。
(此外,您的函数声明它返回String
,但您没有从中返回任何内容。而且您可以使用let
代替var
。{{{ 1}}将是一个可选项。)所以:
userString
然而,func input() {
var fileHandle = NSFileHandle.fileHandleWithStandardInput()
println("Accept or Reject")
if let userData = fileHandle.availableData as NSData? {
let userString = NSString(data: userData, encoding: NSUTF8StringEncoding)
println("You have been \(userString!)")
}
}
input()
实际上是不可用的,这就是为什么你首先得到错误的原因。 fileHandle.availableData
(或if var
)构造需要一个可选项,而该函数不返回一个。因此,整个if测试是多余的,因为它不会失败。因此:
if let
当然,这将接受任何输入,包括空字符串。验证用户数据(在func input() {
var fileHandle = NSFileHandle.fileHandleWithStandardInput()
println("Accept or Reject")
let userData = fileHandle.availableData
let userString = NSString(data: userData, encoding: NSUTF8StringEncoding)
println("You have been \(userString!)")
}
input()
行之后)作为读者的练习。