Swift与元组的可选绑定
我试图在Swift中的IF语句中使用元组作为可选绑定,但它不会编译,并且该错误消息不是有用的。 为什么不能编译?
let user:String? = "billy" let pass:String? = "password" if let test = (user?,pass?){ print("this works") }
或这个
let user:String? = "billy" let pass:String? = "password" if let test = (user,pass){ print("this works") }
编辑:从Xcode 6.3中的Swift 1.2开始,现在可以这样做:
if let user = user, pass = pass { }
绑定多个未打包的可选值。
你不能用这种方式使用可选的let绑定。 let test = (user,pass)
不会编译,因为(user,pass)
不是可选的 – 这是一个包含可选项的元组。 也就是说,它是(Int?,Int?)
而不是(Int,Int)?
。
这应该做你想做的,并允许你同时绑定两个项目:
switch (user, pass) { case let (.Some(user), .Some(pass)): print("this works: \(user), \(pass)") default: () // must handle all cases }
其他答案指出,你必须使用一个switch
。 但是, 如果只打算检查这两个值 ,那么if
没有可选绑定,则实际上更短且易于阅读。
if (user != nil && pass != nil) { print("this works: \(user!), \(pass!)") }
这个switch
是愚蠢的,难以阅读(取自其他答案),但是如果你打算使用其他的情况(零,一些零,零,零),那么它可能是值得的。
switch (user, pass) { case let (.Some(user), .Some(pass)): print("this works: \(user), \(pass)") default: () }
在可选的模式匹配Swift 2中,你可以写
if case let (user?, pass?) = (user, pass) { }
例如,如果(user,pass)是一个存储在一个variables中的元组,这是特别有用的。