getter & setter & private & get only 屬性



//  Person.swiftswift


import UIKit閉包


class Person: NSObject {ide

    

    // -- getter & setter 方法在 Swift 中極少用,僅供參考性能

    // OC 中利用 getter 方法,編寫懶加載,而 Swift 中提供了 lazyspa

    

    // 若是不但願暴露的方法或者屬性,都須要用 private 保護起來!3d

    private var _name: String?orm

    var name: String? {對象

        

        get {get

            // 返回 _成員變量 的值it

            return _name;

        }

        set {

            // 使用 _成員變量記錄新的數值

            _name = newValue

        }

    }

    

    var name2: String?

    



    // -- read only 屬性,只寫 getter 方法

    // Swift get only 屬性

    var title: String? {

        get {

            return "Mr " + (name ?? "")

        }

    }

    



    // 只讀屬性的簡寫方法 - 若是屬性的`修飾`方法,只提供 getter,那麼 get {} 能夠省略

    // 另一種叫法:`計算`型屬性

    // 每一次調用的時候,都會執行 {} 中的代碼,`結果取決於其餘屬性或者緣由`

    // * 每次都要計算,浪費性能 若是計算量很小,能夠使用

    // * 不須要開闢額外的空間

    var title2: String? {

        return "Mr 222 " + (name ?? "")

    }

    




    // 懶加載 第一次調用的時候,執行閉包,而且在 title3 中保存閉包執行結果

    // 再次調用,再也不執行閉包,而是直接返回以前計算的結果!

    // * 只須要計算一次

    // * 須要開闢單獨的空間保存計算結果

    // * 閉包的代碼,不再會被調用!

    // * 若是計算量很大,須要提早準備

    lazy var title3: String? = {

        // 閉包:是一個提早準備好的代碼,在須要的時候執行

        // 使用 self. 用於閉包在執行時,準確的綁定對象

        // 閉包中的 self. 是不能省略的!

        return "Mr 333 - " + (self.name ?? "")

    }()

}


//  ViewController.swift


import UIKit


class ViewController: UIViewController {


    override func viewDidLoad() {

        super.viewDidLoad()


        let p = Person()

        

        p.name = "張三"

        

        print(p.name)

        // 計算型屬性

        print(p.title2)

        // 懶加載

        print(p.title3)

        

        print("----")

        p.name = nil

        p.name = "里斯"

        // 計算型屬性 -> Mr 里斯

        print(p.title2)

        // 懶加載 -> Mr 張三

        print(p.title3)

        


    }



}

相關文章
相關標籤/搜索