如何解决 Realm 对象观察器的泛型问题?

Posted

技术标签:

【中文标题】如何解决 Realm 对象观察器的泛型问题?【英文标题】:How do I resolve the generic for Realm's object observer? 【发布时间】:2021-12-17 01:17:03 【问题描述】:

我已经在 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

我对@9​​87654326@ 感到特别困惑。在这种情况下如何解决泛型?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何解决 Realm 对象观察器的泛型问题?的主要内容,如果未能解决你的问题,请参考以下文章