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
}
相关文章
相关标签/搜索