Skip to content

Instantly share code, notes, and snippets.

@gregpardo
Last active December 25, 2016 23:15
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gregpardo/bec8741ac4a53c6362d9188e44f4309e to your computer and use it in GitHub Desktop.
Save gregpardo/bec8741ac4a53c6362d9188e44f4309e to your computer and use it in GitHub Desktop.
Simple extension on results object for swift realm
extension Realm {
public func rx_objectForPrimaryKey<T: Object>(type: T.Type, key: AnyObject) -> Observable<T?> {
return self.objects(type)
.filter("%K = %@", self.schema[type.className()]!.primaryKeyProperty!.name, key)
.rx_result
}
}
extension Results where T: Object {
public var rx_result: Observable<T?> {
return self.rx_results.map { $0.first }
}
public var rx_results: Observable<[T]> {
var token: NotificationToken? = nil
return Observable.create { observer in
token = self.addNotificationBlock { results, error in
if let error = error {
observer.onError(error)
} else {
if let results = results {
observer.onNext(results.map { $0 })
}
}
}
observer.onNext(self.map { $0 })
return AnonymousDisposable {
if let token = token {
self.realm!.removeNotification(token)
}
}
}.shareReplayLatestWhileConnected()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment