屬性觀察器可讓我們在使用屬性時(shí)候,在希望一個(gè)屬性發(fā)生改變時(shí)候進(jìn)行某些操作。也就是一些小的代碼塊,可在一個(gè)屬性值即可發(fā)生改變之前 willSet 或者之后 didSet 運(yùn)行。要?jiǎng)?chuàng)建一個(gè)屬性觀察器,可在屬性后面添加大括號(類似對計(jì)算屬性的做法)
class PropertyObserverExmple {
var number: Int = 0 {
willSet(newNumber) {
print("About to change to \(newNumber)")
}
didSet(oldNumber) {
print("Just changed from \(oldNumber) to \(self.number)")
}
}
}
var observer = PropertyObserverExmple()
observer.number = 4
// About to change to 4 ,Just changed from 0 to 4
使用例子-比如更換UI主題模式
//屬性觀察器 Property Observer
//注意:didSet 和 willSet 不會再初始化階段init時(shí)候調(diào)用
enum Theme {
case DayMode
case NightMode
}
class UI{
private var fontColor: UIColor!
private var backgroundColor: UIColor!
var themeMode: Theme = .DayMode {
didSet {
self.changeTheme(themeMode)
}
}
init(themeMode: Theme) {
self.themeMode = themeMode
self.changeTheme(themeMode)
}
private func changeTheme(themeMode: Theme) {
switch themeMode {
case .DayMode:
fontColor = UIColor.blackColor()
backgroundColor = UIColor.whiteColor()
case .NightMode:
fontColor = UIColor.whiteColor()
backgroundColor = UIColor.blackColor()
}
}
}

themeMode