Post

Replies

Boosts

Views

Activity

How to use UserDefaults.publisher in SwiftUI
UserDefaults.publisher works really well in UIKit, and even Apple's documentation mainly revolves around that. However, I'm unable to get the desired behaviour of continous observing of values using UserDefaults.publisher in SwiftUI.Example UIKit Code that works perfectly:import UIKit import Combine extension UserDefaults { @objc dynamic var test: Int { return integer(forKey: "test") } } class ViewController: UIViewController { var subscriber: AnyCancellable? // Subscriber of preference changes. override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. subscriber = UserDefaults.standard .publisher(for: \.test) .sink() { print($0) } UserDefaults.standard.set(5, forKey: "test") UserDefaults.standard.set(10, forKey: "test") UserDefaults.standard.set(100, forKey: "test") } }Output of above code:[initial value]510100Problematic SwiftUI code:import SwiftUI import Combine extension UserDefaults { @objc dynamic var userValue: Int { return integer(forKey: "value") } } struct ContentView: View { // @ObservedObject var auth = AuthModel() @State var cancellable: AnyCancellable? = UserDefaults.standard .publisher(for: \.userValue) .sink() { print($0) } var body: some View { Text("hello!") } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }Output: prints the value stored once, however, after that, it doesn't reprints the values automatically on changes.I've tried using a separate Model class, but the issue stays and the core reason remains the same I guess.Any help would be greatly appreciated, thanks!
5
1
7.3k
Jun ’20