美文网首页iOS开发小抄
[翻译] Swift 中使用键-值观察

[翻译] Swift 中使用键-值观察

作者: 张科_Zack | 来源:发表于2021-01-01 18:14 被阅读0次

原创作者:Apple
原文链接: Swift 中使用键-值观察
翻译:Zack


通知对象(Objects)关于其它对象(Objects)属性的改变。

预览

键-值观察是一种 Cocoa 编程模式,使用它通知对象关于另一些对象的属性发生改变。它非常有用在 app 的逻辑分离部分之间交流改变--例如在模型和视图之间。在那些继承自 NSObject 的类中,你能使用键-值观察。

为键-值观察标注一个属性

键-值观察设计模式使用 @objc 属性和 dynamic 修饰符去标注那些你想观察的属性。例如以下在MyObjectToObserve 类中的被观察的属性-myDate。

class MyObjectToObserve: NSObject {
    @objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970
    func updateDate() {
        myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years.
    }
}

定义一个观察者

观察者类的实例管理一个或者多个属性发生改变的信息。当你创建一个观察者,你通过调用 observe(_:options:changeHandler:) 方法开始观察并且传递一个指向被观察属性的关键路径作为参数。
在以下例子中,.objectToObserve.myDate 关键路径指向 MyObjectToObserve 的 ** myDate **属性:

class MyObserver: NSObject {
    @objc var objectToObserve: MyObjectToObserve
    var observation: NSKeyValueObservation?
    
    init(object: MyObjectToObserve) {
        objectToObserve = object
        super.init()
        
        observation = observe(
            \.objectToObserve.myDate,
            options: [.old, .new]
        ) { object, change in
            print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)")
        }
    }
}

你使用 NSKeyValueObservedChange 实例的 newValueoldValue 属性去查看你正在观察属性的改变。

如果你不想知道属性如何改变,忽略 options 参数。被忽略的 options 放弃存储 newold 属性值,这样导致 oldValueoldValue 值为 nil

关联观察者和被观察的属性

通过传递对象到观察者的初始化方法中去关联你想观察的属性和观察者:

let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)

响应一个属性的改变

那些设置键-值观察的对象--例如以上被观察的对象--通知他们的观察者通过属性改变。例如以下例子 myDate 属性改变通过调用 updateDate 方法。这个方法调用自动触发观察者的改变句柄:

observed.updateDate() // Triggers the observer's change handler.
// Prints "myDate changed from: 1970-01-01 00:00:00 +0000, updated to: 2038-01-19 03:14:08 +0000"

以上例子响应属性的改变通过打印日期的新值和旧值。

相关文章

  • [翻译] Swift 中使用键-值观察

    原创作者:Apple原文链接: Swift 中使用键-值观察[https://developer.apple.co...

  • 使用Cocoa框架中的KVC和KVO

    本文讲述了使用Cocoa框架中的KVC和KVO,实现观察者模式 键/值编码中的基本调用包括-valueForKey...

  • 全面剖析KVO与KVC

    本文讲述了使用Cocoa框架中的KVC和KVO,实现观察者模式 KVC 键/值编码中的基本调用包括-valueFo...

  • Python 个人笔记(2)

    《第六章》字典 使用字典在 Python 中,字典是一系列键-值对。 添加键-值对 修改字典中的值 删除键-值对 ...

  • KVO键-值观察编程指南

    注册键-值观察 为了接收某个属性的键-值观察通知,以下三个要素是必须的: 被观察的类当中你关心的属性必须是遵循键-...

  • KVO&KVC

    一 KVO a) 介绍:Objective-C 中的键(key)-值(value)观察(KVO)来源...

  • 字典

    一、使用字典 在Python中,字典是一系列键—值对。每个键都与一个值相关联,你可以使用键来访问与之关联的值,与值...

  • Python入门之字典

    使用字典 在Python中,字典是一系列键-值对。每个键都与一个值相关联,可以使用键来访问与之相关联的值。与键相关...

  • Python使用字典(61)

    在Python中,字典是一系列键——值对。每个键都与一个值相关联,你可以使用键来访问与之相关的值。与键相关的值可以...

  • python字典

    字典存储内容是通过键值对存储的,取出是通过键取值 字典取值,使用中括号,通过键 取的值 增加 字典键 = [值]...

网友评论

    本文标题:[翻译] Swift 中使用键-值观察

    本文链接:https://www.haomeiwen.com/subject/ijodoktx.html