RealmX
Realm + RxSwift 扩展
这是一个微型的库,用于包装 RealmSwift 和 RxSwift。
您可以使用它做什么
ReamX 可以使用 RxSwift 监测 Realm Mobile 数据库。
此外,您可以在反应流中编写或删除对象。
RealmX提供了三个API。
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
安装
Carthage
- 将 github "Urotea/RealmX" 添加到 Cartfile 中。
- 运行
carthage update
CocoaPods
- 将 pod 'Realm-rX' 添加到 Podfile。
- 运行
pod update
示例
toObservable
此API在Realm记录更改时发出事件。
let realm = try! Realm()
realm.objects(Dog.self).toObservable().subscribe{
// when Dog table changed, this print is called.
print($0)
}
您可以在后台线程上创建一个流。
DispatchQueue.global(qos: .background).async {
autoreleasepool {
let realm = try! Realm()
realm.objects(Dog.self).toObservable().subscribe {
print($0)
}
}
}
doInTransaction
此API为任意流提供Realm事务。
尤其适用于从网络获取json并将其写入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.")
})
当您在Rx流中使用WebAPI(例如Moya)时,此API的威力最大。
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 {}
示例应用
要运行示例应用,请克隆此存储库并运行 carthage bootstrap
。
然后,您可以运行示例应用。
另外,如果您查看RealmXTests目录,可以更深入地了解如何使用。
要求
iOS 12.0或更高版本
许可证
RealmX遵循MIT许可证。