LoginSignup
1
4

More than 1 year has passed since last update.

RealmをRxSwiftで実装してみる

Posted at

前提

RealmはRxSwiftCommunityにおいてRxRealmというライブラリが既に存在しますが、
今回はそれらを使用せず実装して行きたいと思います。

実装はDIを意識しているためコンストラクタ経由で実体を渡すようにしています。

保存

    func add<O>(object: O) -> Single<Void> where O : Object {
        return Single<Void>.create { observer in
            do {
                let realm = try Realm()
                try realm.write {
                    realm.add(object)
                    observer(.success(()))
                }
            } catch let error {
                observer(.failure(error))
            }
            return Disposables.create()
        }
    }

今回は一回だけイベントを通知したいのでSingleUnitを使用します。
(Singleとはsuccessかerrorが一回のみ通知されるObservableです)

削除

    func delete<O>(object: O) -> Single<Void> where O : Object {
        return Single<Void>.create { observer in
            do {
                let realm = try Realm()
                try realm.write {
                    realm.delete(object)
                    observer(.success(()))
                }
            } catch let error {
                observer(.failure(error))
            }
            return Disposables.create()
        }
    }

protocolで切り分ける

    /// 保存する
    func add<O: Object>(object: O) -> Single<Void>
    /// 削除する
    func delete<O: Object>(object: O) -> Single<Void>
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4