Swift 计算属性、存储属性

2022-02-16  本文已影响0人  pigLily

属性

Swift中的属性分为存储属性(sorted variable)和计算型属性(computed variable)

存储型属性就是一般意义上理解的可以进行赋值和取值的变量。
var title = "学科"
计算型属性,字面意思为计算型的属性,这种属性没法存储值

计算型属性

特征:仅有get(readOnly语义)或有get+set的属性是计算型属性,有get+set的属性仅作为其他属性的外部接口

    private var _squre: Double = 0.0
    var squre: Double {
        get {
            return _squre
        }
        set {
            if (newValue <= 0) {
                print("newValue = \(newValue)")
            } else {
                _squre = newValue
            }
        }
    }

存储型属性

ps:初始化方法生成对象,并不会出发属性的willSet didSet方法若想再初始化阶段触发didSet,可以采用KVC的方式给对象初始化

willSet能获取将要赋给属性的值newValue

class TestCard {
    init(width: Double) {
        self.width = width
    }
    var width: Double {
        willSet {
            print("willSet方法被调用")
            print("在willSet中,width = \(width),newValue = \(newValue)")
        }
        
        didSet {
            print("didSet方法被调用")
            print("在didSet中,width = \(width),oldValue = \(oldValue)")
        }
    }
}

初始化方法生成对象,并不会触发属性的willSet didSet方法

   // 初始化方法 不会触发 willSet didSet
        let card = TestCard.init(width: 10.0)

改用KVC的方式给对象初始化,就可以调用didSet了:

class TestCard: NSObject {
    init(width: Double) {
        super.init()
        setValue(width, forKey: "width")
    }
    @objc var width: Double = 0.0 {
        willSet {
            print("willSet方法被调用")
            print("在willSet中,width = \(width),newValue = \(newValue)")
        }
        
        didSet {
            print("didSet方法被调用")
            print("在didSet中,width = \(width),oldValue = \(oldValue)")
        }
    }
}
图片.png

计算型属性与懒加载

计算型属性:只是为了调用其他属性而包装的读取方法
    //计算型属性:只是为了调用其他属性而包装的读取方法
    var title: String? {
        get {
            return "所选学课:" + "\(name)"
        }
    }

懒加载

上一篇下一篇

猜你喜欢

热点阅读