function name: safeInUserDefaultFirst
Encode Publisher Ouput, safe in userDefault within key and then continuous the flow
function name: safeInUserDefault
Encode Publisher Ouput, safe in userDefault within key and then finishes the flow
import Combine | |
extension Publisher where Self.Output: Encodable { | |
func safeInUserDefaultFirst(_ key: String) -> AnyPublisher<Self.Output, Self.Failure> { | |
return flatMap { (output)-> Just<Self.Output> in | |
let data = try? JSONEncoder().encode(output) | |
UserDefaults.standard.set(data, forKey: key) | |
return Just(output) | |
}.eraseToAnyPublisher() | |
} | |
} | |
extension Publishers.Decode { | |
func safeInUserDefaultFirst(_ key: String) -> AnyPublisher<Self.Output, Self.Failure> where Self.Output: Codable { | |
return flatMap { (output)-> Just<Self.Output> in | |
let data = try? JSONEncoder().encode(output) | |
UserDefaults.standard.set(data, forKey: key) | |
return Just(output) | |
}.eraseToAnyPublisher() | |
} | |
} | |
extension Publisher where Self.Output: Encodable { | |
func safeInUserDefault(_ key: String)-> AnyCancellable { | |
return sink(receiveCompletion: { _ in }, receiveValue: { | |
let data = try? JSONEncoder().encode($0) | |
UserDefaults.standard.set(data, forKey: key) | |
}) | |
} | |
} |