RealmX
Realm + RxSwift eXtensions
This is a micro library wrapping aroud RealmSwift and RxSwift.
What you can do using this
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
Installation
Carthage
- Add github "Urotea/RealmX" to your Cartfile.
- Run
carthage update
CocoaPods
- Add pod 'Realm-rX' to your Podfile.
- Run
pod update
samples
toObservable
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)
}
}
}
doInTransaction
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 {}
Example App
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.
Requirements
iOS 12.0 or later
License
RealmX is available under the MIT license.