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)

        


    }



}

相关文章
相关标签/搜索