手把手帶你學(xué)習(xí)Swift3.0(26):可選鏈

//: Playground - noun: a place where people can play

import UIKit

/*
 1> 從可選鏈中進(jìn)行取值?.
 2> 給可選鏈進(jìn)行賦值
 3> 可選鏈調(diào)用方法
 */


// 1.創(chuàng)建三個(gè)類(lèi)
class Person {
    var name : String = ""
    var dog : Dog?
}

class Dog {
    var weight : Double = 0.0
    var toy : Toy?
}

class Toy {
    var price : Double = 0
    
    func flying() {
        print("飛盤(pán)在飛ing")
    }
}


// 2.創(chuàng)建類(lèi)的對(duì)象
let p = Person()
p.name = "why"
let d = Dog()
d.weight = 60.0
let t = Toy()
t.price = 100

p.dog = d
d.toy = t


// 3.可選鏈的使用
// 3.1.取出why的狗的玩具的價(jià)格
/*
 該寫(xiě)法非常危險(xiǎn):
    let dog = p.dog
    let toy = dog!.toy
    let price = toy!.price
 */

/*
 該寫(xiě)法非常麻煩
    if let dog = p.dog {
        if let toy = dog.toy {
            let price = toy.price
        }
    }
 */
// ?.就是可選鏈: 系統(tǒng)會(huì)自動(dòng)判斷該可選類(lèi)型是否有值
// 如果有值,則解包, 如果沒(méi)有值, 則賦值為nil
// 注意: 可選鏈條獲取的值,一定是一個(gè)可選類(lèi)型
if let price = p.dog?.toy?.price { // Double/nil
    print(price)
}

let price = p.dog?.toy?.price


// 3.2.給why的狗的玩具賦值一個(gè)新的價(jià)格
// 如果可選鏈中有一個(gè)可選類(lèi)型是沒(méi)有值, 那么語(yǔ)句直接不執(zhí)行
p.dog?.toy?.price = 50


// 3.3.可選鏈調(diào)用方法
/*
 該寫(xiě)法太麻煩
    if let dog = p.dog {
        if let toy = dog.toy {
            toy.flying()
        }
    }
 */

p.dog?.toy?.flying()


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容