swift 可选链 循环引用



//循环引用
class Person{
    var name : String = ""
    var book : Book?
    deinit {
        print("persion---deinit")
    }
}

class Book{
    var price : Double = 12.0
    weak var owner : Person?
    deinit {
        print("book---deinit")
    }
}

var person : Person? = Person()
person!.name = "dog"


var book : Book? = Book()
book!.price = 10.0
book!.owner = person

person?.book = book;

person = nil

//2. 可选链的使用
class People{
    var name : String = ""
    var dog : Dog?
}

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

class Toy{
    var price : Double = 0.0
    func fly() {
        print("toy flying")
    }
}
 let p = People()
p.name = "why"
let d = Dog()
d.weight = 60.0
let t = Toy()
t.price = 10

p.dog = d
d.toy = t

//?. 为可选链 系统会自动判断可选类型是否有值
//如何有值,则解包,如果没有值,则赋值为nil
//注意:可选链获取的值 一定是一个可选类型
if let price = p.dog?.toy?.price {
    print(price)
}

p.dog?.toy?.price = 50

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容