Xcode 条件绑定中的绑定值必须是Swift中的可选类型
我正在尝试获取下面的代码,以允许我在控制台中输入Accept或Reject;但是在“IfVarUserData=fileHandle.availableData{”行中,我得到了错误 条件绑定中的绑定值必须是可选类型Xcode 条件绑定中的绑定值必须是Swift中的可选类型,xcode,macos,swift,input,Xcode,Macos,Swift,Input,我正在尝试获取下面的代码,以允许我在控制台中输入Accept或Reject;但是在“IfVarUserData=fileHandle.availableData{”行中,我得到了错误 条件绑定中的绑定值必须是可选类型 func input() -> String { var fileHandle = NSFileHandle.fileHandleWithStandardInput() println("Accept or Reject") if var userData
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()
错误告诉您,
userData
必须是可选类型。但是fileHandle.availableData
返回的NSData
不是可选类型。因此,您必须将其设置为可选类型
(此外,您的函数声明它返回一个字符串
,但您没有从中返回任何内容。您可以使用let
而不是var
。userString
将是可选的。)因此:
但是,fileHandle.availableData
实际上是不可失败的,这就是为什么首先会出现错误的原因。if var
(或if let
)构造需要一个可选的,而函数不返回一个。因此,整个if测试是冗余的,因为它不会失败。因此:
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()
当然,这将接受任何输入,包括空字符串。验证用户数据(在
let userString
行之后)作为练习留给读者。该线程中的答案太模糊,无法帮助我解决这个问题。另一个问题更多地是关于可选的,因为它与条件转换有关;这个问题可以独立解决。(除非有关于返回非可选值的API的另一个问题,以及类似@i40west的答案。)
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()