我如何解析 Realm 的对象观察者的泛型?

How do I resolve the generic for Realm's object observer?

我已经在 Realm 中实现了一个对象观察器...

let contactObserver: NotificationToken = contact.observe { change in
    switch change {
    case .change(let object, _):
        guard let contact = object as? Contact,
...

观察者工作正常。但是您会注意到,在 .change 的情况下,我将关联对象转换为其实际类型 Contact。如果可能的话,我想避免这种情况。

我注意到 observe 是一个通用...

func observe<T>(keyPaths: [String]? = nil, on queue: DispatchQueue? = nil, _ block: @escaping (ObjectChange<T>) -> Void) -> NotificationToken where T : RLMObjectBase

我对 (ObjectChange<T>) 特别困惑。在这种情况下如何解决通用问题?

您在声明闭包参数时指定了泛型约束的类型:

let contactObserver: NotificationToken = contact.observe { (change: ObjectChange<Contact>) in
    switch change {
    case .change(let object, let changes):
        print("change: \(object): \(changes)")
    case .deleted:
        print("deleted")
    case .error(let error):
        print("error: \(error)")
    }
}

.change 案例中的关联值现在是 Contact