我如何解析 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
。
我已经在 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
。