Swift -- 解包

一、解包!
    可選類型在每次訪問的時候都會提早並檢測它的值是否存在,但有時候根據程序結構就能夠推斷出可選類型在首次賦值以後必然存在值,這個時候,就不須要每次都檢測值是否存在,若是肯定一個可選類型的值必定存在,那麼咱們使用 "!" 進行解包獲取它的值,或者使用Optional Binding
 
let str: String? = "Hello, playground";
print(str!); //肯定該變量有值,則直接進行解包便可

// Optional Binding
if let tempStr = str {
   print(tempStr)
}

 

 
二、隱式解包可選類型
 
  • 直接在類型後面加! 來指定
  • 隱式解包的可選類型主要用在一個變量/常量在定義瞬間完成以後值必定會存在的狀況。這主要用在類的初始化過程當中
  • 隱式解包的可選類型本質是可選類型,可是能夠被當成通常類型來使用,不須要每次驗證值是否存在
  • let possibleString: String? = "An optional string."
    print(possibleString!)
    
    let assumedString: String! = "An implicitly unwrapped optional string."
    print(assumedString)
  • 注意:若是一個隱式解包的可選類型不包含一個實際值,那麼對它的訪問會拋出一個運行時錯誤。在變量/常量名後面加!的狀況也是同樣的。
  • 你能夠把解包可選類型當成正常的可選類型來探測是否有值。
  • if (assumedString != nil) {
        print(assumedString)
    }
  • 或者經過類型綁定檢查
  • if let definiteString = assumedString {
        print(definiteString)
    }

     

注意:若是一個可選類型存在沒有值的可能的話,不該該使用解包可選類型。這種狀況下,必定要使用正常的可選類型。
 
 
同時解包多個可選類型
var username: String?
var password: String?

switch (username, password){
case let (username?, password?):   // 這裏的  ?  是Swift2.0以後新增的語法,表示有值
    print("都有值")
    break
case let (usermane?, nil):
    print("請輸入密碼")
    break
case let (nil, password?):
    print("請輸入帳號")
    break
case let (nil, nil):
    print("請輸入帳號密碼")
    break
default:
    break
}
相關文章
相關標籤/搜索