use*_*761 2 macos xcode input swift
我正在尝试获取下面的代码,以允许我在控制台中输入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()
Run Code Online (Sandbox Code Playgroud)
小智 7
错误告诉您userData必须是可选类型.但是fileHandle.availableData返回NSData不属于可选类型的东西.所以你必须让它成为可选的.
(此外,你的函数声明它返回一个String,但你没有从它返回任何东西.你可以使用let而不是var.并且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()
Run Code Online (Sandbox Code Playgroud)
但是,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()
Run Code Online (Sandbox Code Playgroud)
当然,这将接受任何输入,包括空字符串.验证用户数据(let userString在行之后)作为读者的练习.