Swift - 属性观察器 Property Observer

属性观察器可让我们在使用属性时候,在希望一个属性发生改变时候进行某些操作。也就是一些小的代码块,可在一个属性值即可发生改变之前 willSet 或者之后 didSet 运行。要创建一个属性观察器,可在属性后面添加大括号(类似对计算属性的做法)
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时候调用
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift语法基础(五)-- (类和结构体、属性、方法) 本章将会介绍 类和结构体对比结构体和枚举是值类型类是引用...
    寒桥阅读 1,099评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • 属性将值跟特定的类、结构或枚举关联。存储属性存储常量或变量作为实例的一部分,而计算属性计算(不是存储)一个值。计算...
    穷人家的孩纸阅读 419评论 0 0
  • 我写这个题目,我自己都感觉很陌生,在我初中的时候,我爷爷去世的。即便他在世的时候,我们也没什么交集。我小时候并不像...
    沉默岛主阅读 400评论 0 2
  • 阅读,对很多人来说,是一种习惯,甚至是一种信仰,人们徜徉遨游其中,以此找到生命的寄托。对于我来说,阅读是一个与世界...
    顾嘉阅读 2,438评论 1 2