Swift可选绑定元组

RMH*_*RMH 13 optional ios swift

我试图在Swift的IF语句中使用元组作为可选绑定,但它不会编译,并且该错误消息不太有用.以下为什么不编译?

let user:String? = "billy"
let pass:String? = "password"

if let test = (user?,pass?){
    print("this works")
}
Run Code Online (Sandbox Code Playgroud)

或这个

let user:String? = "billy"
let pass:String? = "password"

if let test = (user,pass){
    print("this works")
}
Run Code Online (Sandbox Code Playgroud)

Air*_*ity 19

编辑:从Xcode 6.3中的Swift 1.2开始,您现在可以:

if let user = user, pass = pass { }
Run Code Online (Sandbox Code Playgroud)

绑定多个未包装的可选值.

您不能以这种方式使用可选的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
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*kkk 7

在带有可选模式匹配的 Swift 2 中,您可以编写

if case let (user?, pass?) = (user, pass) { }
Run Code Online (Sandbox Code Playgroud)

例如,如果 (user, pass) 是存储在变量中的元组,这将特别有用。