属性有很多类型,比如存储属性:赋值存值的,延迟属性,差不多和 oc 中的懒加载类似,计算属性,类型属性.还有属性观察器等
存储属性
class@H_502_6@ Person@H_502_6@{@H_502_6@
//@H_502_6@ 属性由 var@H_502_6@ 修饰,如果类实例也是 var@H_502_6@ 修饰,则类实例的属性值可变
var@H_502_6@ name = "zhangsan"@H_502_6@
var@H_502_6@ age = 23@H_502_6@
}
//@H_502_6@var@H_502_6@ 修饰类实例,属性值可变,类实例也可以重新赋值
var@H_502_6@ person1 = Person()
person1.name = "wangwu"@H_502_6@
print@H_502_6@(person1.name)
person1.name = "张三"@H_502_6@
print@H_502_6@(person1.name)
person1 = Person()
//@H_502_6@let@H_502_6@ 修饰类实例,var@H_502_6@属性值可变,let@H_502_6@ 修饰的属性值不可变,类实例 不可以重新赋值
let@H_502_6@ person2 = Person()
person2.name = "zhaoliu"@H_502_6@
print@H_502_6@(person2.name)
person2.name = "赵六"@H_502_6@
print@H_502_6@(person2.name)
//@H_502_6@let@H_502_6@ 修饰的类实例不可以重新赋值
//@H_502_6@person2 = Person()
//@H_502_6@结构体
struct Point {
var@H_502_6@ x = 0@H_502_6@
var@H_502_6@ y = 0@H_502_6@
}
//@H_502_6@var@H_502_6@ 修饰结构体实例,类实例也可以重新赋值
var@H_502_6@ p1 = Point()
p1.x = 20@H_502_6@
print@H_502_6@(p1.x)
p1.x = 30@H_502_6@
print@H_502_6@(p1.x)
//@H_502_6@let@H_502_6@ 修饰的结构体实例不可以重新赋值,属性也不可以重新赋值,不管属性是 var@H_502_6@ 还是 let@H_502_6@ 修饰,都默认为 let@H_502_6@ 不能修改
let@H_502_6@ p2 = Point()
print@H_502_6@(p2.y)
//@H_502_6@p2.y = 11@H_502_6@
// p2 = Point()
延迟属性
注意观察属性调用的时间(有了 lazy 关键字,只有当属性第一次被调用的时候才会初始化)
class@H_502_6@ Man@H_502_6@{@H_502_6@
var@H_502_6@ name = "wangxiao"@H_502_6@
// 延迟属性 lazy 前面加 lazy 关键字@H_502_6@
lazy var@H_502_6@ car = Car(car:"baoma"@H_502_6@)
}
class@H_502_6@ Car@H_502_6@{@H_502_6@
var@H_502_6@ car = "dazhong"@H_502_6@
init(car:String) {
self@H_502_6@.car = car
for@H_502_6@ i in 1.@H_502_6@..1000@H_502_6@{
print@H_502_6@(i)
}
}
}
// 如果 Man 的car 属性不加 lazy,就会立刻执行 car 类中的 for 循环进行初始化@H_502_6@
var@H_502_6@ man = Man()
// 如果加了 lazy 在这里才会初始化 car@H_502_6@
//man.car = Car(car: "baoma")@H_502_6@