如何解决 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 对象观察器的泛型问题?的主要内容,如果未能解决你的问题,请参考以下文章

如何将方法的泛型类型限制为打字稿中的对象?

使用支持对象/结构的泛型时如何返回空值/默认值? [复制]

如何在打字稿的泛型类中创建类型为“T”的新对象?

dubbo 泛化调用场景下,如何调用下游的泛型对象入参

使用泛型的观察者模式太泛型

从矩阵快速幂的泛型模板设计——教你如何优雅的面向对象