存储型属性:用于存储一个常量或者变量
class Person1 {
var name: String = "lili"
let age: Int = 10
lazy var p1:Person1 = Person1() }
// 用lazy 修饰的,是延迟加载,必须用 var 修饰
// 用 var 修饰的 name,可以在外界改变值,而用let 修
// 饰的属性age,外面不可以改变其值
**简单来说,存储型属性主要就是用来存储值的
计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化.
// get 用来取值
// set 用来赋值
class Person2{
var weight: Int = 10
var height: Int = 5
// age 实现了get 和set 方法,可以在外面给这个属性赋值.
var age: Int {
get {
return height * 3
}
set(newValue){ // 或者直接用 newAge
height = newValue * 5
}
}
//如果不实现set 方法,是不能给其赋值的,这种类型的属于只读计算属性.只读计算属性是可以省略get 的,直接返回即可.如 size 属性
var size: Int{
return height * 3
}
//MARK: 计算属性死循环情况
/*
计算属性值是不固定的,不能用 let 修饰,只能用 var
计算型属性不能直接赋值
*/
// 下面的 get 和 set 方法都会导致死循环
var name: String{
get {
return name // 这里会调用 get 方法
}
set {
name = newValue // 这里调用 set 方法
}
}
}