Swift類執行個體與循環參考的解決

來源:互聯網
上載者:User

標籤:

代碼-情形1:

// 兩個屬性的值都允許為nil,這種情境最適合用弱引用來解決class Person {    let name: String    init(name: String) {        self.name = name    }        // 弱引用    var apartment: Apartment?    deinit {        print("\(name) is being deinitialized")    }}class Apartment {    let number: Int        init(number: Int) {        self.number = number    }        // 弱引用    weak var tenant: Person?        deinit {        print("Apartment #\(number) is being deinitialized")    }}var John: Person? = Person(name: "John")var Number73: Apartment? = Apartment(number: 73)John!.apartment = Number73Number73!.tenant = JohnJohn = nilNumber73 = nil

 

代碼-情形2:

// 一個屬性的值允許為nil,而另一個屬性的值不允許為nil,這種情境最適合通過無主引用來解決class Customer {    let name: String    var card: CreditCard?    init(name: String) {        self.name = name    }    deinit {        print("\(name) is being deinitialized")    }}class CreditCard {    let number: UInt64    // 無主引用,不會對執行個體產生強引用    unowned let customer: Customer    init(number: UInt64, customer: Customer) {        self.number = number        self.customer = customer    }    deinit {        print("Card #\(number) is being deinitialized")    }}var john: Customer? = Customer(name: "John Appleseed")john!.card = CreditCard(number: 1234_5678_9012_3456, customer: john!)john = nil

 

代碼-情形3:

// 兩個屬性都必須有值,並且初始化完成後永遠不會為nil// 這種情境最適合通過一個類使用無主屬性,而另外一個類使用隱式解析可選屬性來解決class Country {    let name: String    var capitalCity: City!    init(name: String, capitalName: String) {        self.name = name        self.capitalCity = City(name: capitalName, country: self)    }    deinit {        print("Country named \(name) is being deinitialized")    }}class City {    let name: String    unowned let country: Country    init(name: String, country: Country) {        self.name = name        self.country = country    }    deinit {        print("City named \(name) is being deinitialized")    }}var country: Country? = Country(name: "Canada", capitalName: "Ottawa")country = nil

 

Swift類執行個體與循環參考的解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.