条件绑定中的绑定值必须是Swift中的Optional类型

时间:2014-12-18 22:34:14

标签: xcode macos swift input

我正在尝试获取下面的代码,以允许我在控制台中输入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()

1 个答案:

答案 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() 行之后)作为读者的练习。