前提
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>