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中的元组,这是特别有用的。