Last active
December 25, 2016 23:15
-
-
Save gregpardo/bec8741ac4a53c6362d9188e44f4309e to your computer and use it in GitHub Desktop.
Simple extension on results object for swift realm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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