unwrapping multiple optionals in if statement

前端 未结 8 595
鱼传尺愫
鱼传尺愫 2020-11-28 07:38

I want to unwrap two optionals in one if statement, but the compiler complaints about an expected expression after operator at the password constant. What could be the reaso

相关标签:
8条回答
  • 2020-11-28 08:05

    Great news. Unwrapping multiple optionals in a single line is now supported in Swift 1.2 (XCode 6.3 beta, released 2/9/15).

    No more tuple/switch pattern matching needed. It's actually very close to your original suggested syntax (thanks for listening, Apple!)

    if let email = emailField?.text, password = passwordField?.text {
    
    }
    

    Another nice thing is you can also add where for a "guarding condition":

    var email: String? = "baz@bar.com"
    var name: String? = "foo"
    
    if let n = name, e = email where contains(e, "@") {
      println("name and email exist, email has @")
    }
    

    Reference: XCode 6.3 Beta Release Notes

    0 讨论(0)
  • 2020-11-28 08:09

    Based on @Joel's answer, I've created a helper method.

    func unwrap<T, U>(a:T?, b:U?, handler:((T, U) -> ())?) -> Bool {
        switch (a, b) {
        case let (.Some(a), .Some(b)):
            if handler != nil {
                handler!(a, b)
            }
            return true
        default:
            return false
        }
    }
    

    // Usage

    unwrap(a, b) {
        println("\($0), \($1)")
    }
    
    0 讨论(0)
提交回复
热议问题