You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // Rx+UserDefaultsWrapper.swift // GME Remit // // Created by InKwon James Kim on 2020/01/10. // Copyright © 2020 Gobal Money Express Co. Ltd. All rights reserved. //
import RxSwift import RxCocoa
extension UserDefaultsWrapper: ReactiveCompatible {}
extension Reactive where Base: UserDefaults { public func `default`<E: Equatable>(_ type: E.Type, _ keyPath: String) -> Observable<E?> { let center = NotificationCenter.default let initial = base.object(forKey: keyPath) as? E let changes = center.rx.notification(UserDefaults.didChangeNotification) .map { _ in self.base.object(forKey: keyPath) as? E } return Observable<E?>.just(initial) .concat(changes) .distinctUntilChanged { previous, next in guard let previous = previous, let next = next else { return false } return previous == next } } }
extension Reactive where Base: UserDefaultsWrapper<GMEDB.UserKeys> { func set(key: GMEDB.UserKeys) -> Binder<String?> { return Binder(self.base) { db, value in db.set(value, key) } } func string(key: GMEDB.UserKeys) -> Observable<String?> { return UserDefaults.standard.rx.default(String.self, key.rawValue) } }
|