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.
 
 
 
 

44 lines
1.2 KiB

//
// 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)
}
}