[swift学习之十四]计算属性和存储属性

//------------------------//
/*
 注意点
 1:willSet得注意大小写,写错了,不认识,而且还没有书写提示。
 2:存储属性只要合法,不用指明类型或者初始值,都可以加willSet.
 3:即使是相同的值,也会调用
 4:willSet和didSet只能用于存储属性。set和get只能用于计算属性,但没有只写属性。
*/
/*8,和Int64一样,8个字节。*/
print(sizeof(Int))
class OnlyOneCalculateProperty:NSObject{
    var PropertyName:Int{
        get{
            return 30
        }
        set(NewValue){
           print(NewValue)
        }
    }
}
/*16。可见计算属性不占存储空间,和没有一样大小。计算属性set和get里面要注意死循环哈~!*/
print(class_getInstanceSize(OnlyOneCalculateProperty))
class OnlyOneStoreProperty:NSObject{
    var PropertyName:Int = 0{
        willSet(newValue){
            print("将要设定age,原值:\(PropertyName),新值:\(newValue)")
        }
        didSet(oldValue){
            print("将要设定age,原值:\(oldValue),新值:\(PropertyName)")
        }
    }
}
/*24。可见存储属性占用存储空间,多了8字节。*/
print(class_getInstanceSize(OnlyOneStoreProperty))
class Person:NSObject{
    var age:Int = 30 {
        willSet(newValue){
            print("将要设定age,原值:\(age),新值:\(newValue)")
        }
        
        didSet(oldValue){
            print("将要设定age,原值:\(oldValue),新值:\(age)")
        }
   }
    var Weight:Int{
        get{
            print("获取Weight属性值:\(75)")
            return 75
        }
        set(newValue){
            print("设置Weight属性值:\(newValue)")
        }
    }
}
/*计算属性可以被子类覆盖,存储的不可以哦~!*/
class Student: Person{
override var Weight: Int{
        get{
            print("获取Weight属性值:\(70)")
            return 70
        }
        set(newValue){
            print("设置Weight属性值:\(newValue)")
        }
    }
}
let P = Person()
P.Weight = 80
print(P.Weight)

let S = Student()
S.Weight = 80
print(S.Weight)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值