Swift2-同時解包多個可選值(Optionals)

話不多說,直接上代碼

方式1:

var optional1: String?
var optianal2: String?

if let optional1 = optional1, optianal2 = optianal2 {
    
}

看起來很美~問題來了:如果我希望處理optional1有值,optional2沒值的情況怎么辦?聰明的你立馬想到了:

if let optional1 = optional1 {
    guard let _ = optianal2 else{
        print(optional1)
        return
    }
}

那optional1無值,optional2有值的情況,optional1與optional2都沒值的情況吶...別打我:)
可見,方法一在遇到需要對多個可選值分開判斷有無值的時候,似乎變得十分無力。可見的一個實際應(yīng)用場景是登錄界面:假設(shè)我們有loginNameTextFieldpasswordTextField兩個輸入框,當用戶點擊登錄按鈕時,我們需要對兩個輸入框進行是否有值的判斷,進而給用戶拋出對應(yīng)的錯誤。
那有沒有其他的方式來解包多個可選值?我們來看看第二種方式看是否可以優(yōu)雅地解決這個問題。

方式2:

//Swift2
var username: String?
var password: String?
 
switch (username, password) {
case let (username?, password?):
    print("Success!")
case let (username?, nil):
    print("Password is needed!")
case let (nil, password?):
    print("Username is needed!")
case (nil, nil):
    print("Password and username are needed!")
}

看起來好多了~等等,case let (username?, nil):中的?是什么鬼,無需驚恐,這里的?跟可選值的?沒有一點關(guān)系。username?表示的是username有值, nil即表示無值。事實上,這個?Swift2新增的語法,我們來看看Swift2以前是怎樣的:

//Before Swift2
var username: String?
var password: String?
 
switch (username, password) {
case let (.Some(username), .Some(password)):
    print("Success!")
case let (.Some(username), .None):
    print("Password is needed!")
case let (.None, .Some(password)):
    print("Username is needed!")
case (.None, .None):
    print("Password and username are needed!")
}

相比較而言,新的語法看起來精簡了許多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,890評論 1 10
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,251評論 4 61
  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,526評論 0 12
  • 問題及解決方法 哨崗值 - 可選值產(chǎn)生的背景 在編程世界中有一種非常通用的模式,那就是某個操作是否要返回一個有效值...
    SmartisanBool閱讀 818評論 0 0
  • 作為一位留了四五年長發(fā)的我,昨天終于下定決心去剪了短頭發(fā),其間的糾結(jié)期盼,真不是一般人能想象的。 ...
    馮陳陳閱讀 1,240評論 3 3