unwrapping multiple optionals in if statement

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? = "[email protected]"
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


Update for Swift 3:

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

each variable must now be preceded by a let keyword


How about wrapping the optionals in a tuple and using switch to pattern match?

switch (self.emailField?.text, self.passwordField?.text) {
case let (.Some(email), .Some(password)):
    // unwrapped 'email' and 'password' strings available here
default:
    break
}

It's definitely a bit noisier, but at least it could also be combined with a where clause as well.