存儲型屬性:用於存儲一個常量或者變量
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 方法
}
}
}