Tag: 观察

Swift中的KVO(关键值观察)

键值观察是一种机制,它可以在另一个对象的属性发生更改时直接通知该对象。 这是按照Model-View-Controller设计模式设计的应用程序中对象之间的通信模式。 控制器可以观察模型,视图可以观察控制器和模型。 因此,可以使用KVO优雅地处理模型对象属性的更改。 键值观察要求您的对象遵守NSKeyValueObserving协议。 任何继承NSObject的Class都会自动实现NSKeyValueObserving协议,因为NSObject符合NSKeyValueObserving。 注意:NSKeyValueObserving API并不是最干净的API(就语法和参数而言)。 但话虽这么说,它功能强大,开发人员应该使用它。 NSKeyValueObserving :一种非正式协议,对象采用该协议以将其他对象的指定属性的更改通知给对象。 如何注册和观察另一个对象属性? 注册观察 : 注册观察者对象以接收相对于接收此消息的对象的密钥路径的KVO通知。 func addObserver(_观察者:NSObject, forKeyPath keyPath:字符串, 选项:NSKeyValueObservingOptions = [], 上下文:UnsafeMutableRawPointer?) 注册观察者对象以接收相对于接收此消息的对象的密钥路径的KVO通知。 观察通知方法: func watchValue(forKeyPath keyPath:String ?, 对象:任何?, 更改:[NSKeyValueChangeKey:任何] ?, 上下文:UnsafeMutableRawPointer?) 使用键值观察时的另一个主要问题是内存管理。 当观察者不再对接收特定密钥路径的通知感兴趣时,需要将其明确删除。 您有两个选择。 deinit { removeObserver(self,forKeyPath:#keyPath(property)) } 它很容易理解和使用,但开发人员仍然不经常使用它。 希望您理解此模式,并在您的项目中也使用它。

Swift iOS访谈:关于财产和财产观察员的一切

属性:属性是与特定类,结构和枚举关联的值。 属性基本上是两种类型。 1.储存财产: 存储属性可以存储变量和常量。 存储类和结构给出的属性。 商店属性无法在扩展名中定义。 2.计算财产: 计算属性是计算而不是存储。 由类,结构和枚举给出的计算属性。 计算属性始终是可变的。 计算属性提供getter和可选的setter 懒惰的存储属性: 直到使用时才计算其初始值的属性。 惰性存储的属性始终是可变的。 惰性属性的应用:属性的初始值取决于外部因素 , 而外部因素的值直到实例初始化完成后才知道。 GPS类{ 在里面() { 打印(“正在初始化GPS …”) } } 车类{ 惰性变量导航= GPS() } var car = Car() 在上面的示例中,在每种情况下都不需要导航属性。 物业观察员: 财产观察员观察并响应财产价值的变化。 每当值改变时都会调用它。 可以在存储属性(懒惰存储属性除外)上定义属性观察器。 可以为覆盖的存储和计算的属性定义属性观察器。 属性观察者不需要为非覆盖的计算属性定义。 类型属性:(静态) 不管您创建了多少个该类型的实例,这些属性只有这些属性的一个副本。 Type属性不能被覆盖。 您必须始终为存储的类型属性提供默认值。 静态 varstoredTypeProperty =“ Animesh” struct SomeStructure { static varstoredTypeProperty =“某些值。” 静态 var […]