可選鍊提供一個一種可選的方式訪問對象的屬性、方法、下标腳本,可選鍊的傳回值一定是可選類型。
長處:替代強制解析(符号!,比如instance.location!.y),由于強制解析nil的值會導緻執行期錯誤我的心得:對一個鍊式調用,比方instance.Frame.Origin.x等非常長的調用,對可能是nil的部分加上?
比如,frame和Origin可能為nil。則這麼使用instance.Frame?.origin?.x
可選鍊的特點:中間有一次可選的值為nil,那麼整個可選鍊失效。傳回nil
舉個簡單的樣例就明确了
}
class B{
var varB:C?
var varBArray = [D]()
subscript(index:Int)->D?{
if(index < varBArray.count){
return varBArray[index]
else{
return nil
class C{
var varC:String = "from C"
func printC(){
println(varC)
class D{
var varD1:Int = 10
var varD2:E = E()
class E{
func printE(){
println("from E")
var instance = A()
一、通過可選鍊調用屬性
備注:因為傳回可選類型,要用if let這種句式隐式解析
二、通過可選鍊調用方法
三、通過可選鍊調用下标腳本
[5]?.varD1{ println(temp)
這裡解釋下為什麼這麼用
instance.varA?[5]是用可選鍊訪問下标腳本。傳回D?,然後對傳回的D?再通過可選鍊訪問,搜易訪問的時候是 instance.varA?[5]?.varD1
四、長的可選鍊調用