关闭

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

标签: swift属性
314人阅读 评论(0) 收藏 举报
分类:
//------------------------//
/*
 注意点
 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)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38853次
    • 积分:1955
    • 等级:
    • 排名:千里之外
    • 原创:152篇
    • 转载:5篇
    • 译文:4篇
    • 评论:3条
    文章分类
    最新评论