Realm + RxSwift eXtensions
This is a micro library wrapping aroud RealmSwift and RxSwift.
ReamX can observe Realm Mobile DataBase using RxSwift.
And more, you can write or delete object in reactive stream.
RealmX provides three APIs.
Results<Element>.toObservable() -> Observable<Results<Element>>
Realm().doInTransaction<Element: Object>(
object: [Element],
inTransaction: @escaping ((Realm, [Element]) -> Void)) -> Completable
doInTransaction<Element: Object>(
results: Results<Element>,
inTransaction: @escaping ((Realm, Results<Element>) -> Void)) -> Completable
- Add github "Urotea/RealmX" to your Cartfile.
- Run
carthage update
- Add pod 'Realm-rX' to your Podfile.
- Run
pod update
This API emits a event when Realm records changed.
let realm = try! Realm()
realm.objects(Dog.self).toObservable().subscribe{
// when Dog table changed, this print is called.
print($0)
}
You can make a stream on background thread.
DispatchQueue.global(qos: .background).async {
autoreleasepool {
let realm = try! Realm()
realm.objects(Dog.self).toObservable().subscribe {
print($0)
}
}
}
This API provides Realm transaction on any stream.
In particular, this is useful for getting json from the network and writing it to Realm.
let realm = try! Realm()
let dog = Dog()
dog.age = 1
dog.name = "pochi"
realm.doInTransaction(object: [dog]) { (realm: Realm, dogList: [Object]) in
realm.add(dogList.first!)
}.subscribe(onCompleted: {
print("insert success.")
})
This show the most power when you use WebAPI(e.g. Moya) in Rx stream.
let provider = MoyaProvider<Dogs>()
provider
.rx
.request(.get)
.observeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.map{
let dog = Dog()
dog.age = $0.age
dog.name = $0.name
}
.flatMap {
let realm = try! Realm()
return realm.doInTransaction(object: [$0]) { realm, dogList in
realm.add(dogList.first!)
}
}
.subscribe {}
To run example app, clone this repository and run carthage bootstrap
.
And then, you can run exsample app.
Further, if you look RealmXTests directory, you can more understand how to use.
iOS 12.0 or later
RealmX is available under the MIT license.