Realm-rX 1.0.3

Realm-rX 1.0.3

Urotea 维护。



 
依赖项
RealmSwift>= 3.13.0
RxSwift>= 4.4.0
RxCocoa>= 4.4.0
 

Realm-rX 1.0.3

  • Urotea

RealmX

Codacy Badge Reviewed by Hound Carthage compatible

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许可证。