通过 Youtuber:ChaoCode 的教学视频编写的笔记
一、计算属性
计算属性每次读取时都要重新计算,不适合太复杂繁重的任务。
计算属性需要满足以下三点:
- 必须使用
var
声明。 - 不可以省略类型。
- 至少能够 get。
struct Goods {
let price = 100.0
let discount = 0.8
var actualPrice: Double {
price * discount
}
/// MARK: - 或者
var actualPrice: Double {
// 自定 set 新值的名称 set(newPrice)
set { discount = newValue / price }
get { price * discount }
}
}
二、属性观察
属性观察可以用来通知值的变化,就算新的值相同,也会触发。
通常与 存储属性
或者 继承的计算属性
搭配使用。
struct Goods {
let price = 100.0
let discount = 0.8
// 即将改变
willSet {
print("折扣将要调整为 \(newValue)")
}
// 已经改变
didSet {
print("折扣已经调整成 \(oldValue)")
}
var actualPrice: Double {
price * discount
}
}
var price: Double {
set {
// willSet 时机
discount = newValue / price
// didSet 时机
}
}
三、lazy 属性
struct Goods {
let price: Double
var discount: Double {
didSet { actualPrice = price * discount }
}
// 不会在 Goods 初始化时完成计算,而是在调用时才进行计算
lazy private(set) var actualPrice: Double = price * discount
}