swift 学习笔记(22)-属性(存储属性/延迟属性)

来源:互联网 发布:人工智能剧情详细 编辑:程序博客网 时间:2024/06/06 12:36

属性有很多类型,比如存储属性:赋值存值的,延迟属性,差不多和 oc 中的懒加载类似,计算属性,类型属性.还有属性观察器等
存储属性

class Person{    // 属性由 var 修饰,如果类实例也是 var 修饰,则类实例的属性值可变    var name = "zhangsan"    var age = 23}//var 修饰类实例,属性值可变,类实例也可以重新赋值var person1 = Person()person1.name = "wangwu"print(person1.name)person1.name = "张三"print(person1.name)person1 = Person()//let 修饰类实例,var属性值可变, let 修饰的属性值不可变,类实例 不可以重新赋值let person2 = Person()person2.name = "zhaoliu"print(person2.name)person2.name = "赵六"print(person2.name)//let 修饰的类实例不可以重新赋值//person2 = Person()//结构体struct Point {    var x = 0    var y = 0}//var 修饰结构体实例,属性值可变,类实例也可以重新赋值var p1 = Point()p1.x = 20print(p1.x)p1.x = 30print(p1.x)//let 修饰的结构体实例不可以重新赋值,属性也不可以重新赋值,不管属性是 var 还是 let 修饰,都默认为 let 不能修改 let p2 = Point()print(p2.y)//p2.y = 11// p2 = Point()

延迟属性
注意观察属性调用的时间(有了 lazy 关键字,只有当属性第一次被调用的时候才会初始化)

class Man{    var  name = "wangxiao"// 延迟属性 lazy 前面加 lazy 关键字   lazy var car = Car(car:"baoma")}class Car{    var car = "dazhong"    init(car:String) {        self.car = car        for i in 1...1000{            print(i)        }    }}// 如果 Man 的car 属性不加 lazy ,就会立刻执行 car 类中的 for 循环进行初始化var man = Man()// 如果加了 lazy 在这里才会初始化 car//man.car = Car(car: "baoma")
0 0
原创粉丝点击