SwiftUI:如何将 .toggle() 而不是 Toggle(isOn..) 与 UserDefault 结合起来

SwiftUI: How to combine .toggle() not Toggle(isOn..) with UserDefault

目前我有

@Published var isVisited: Bool {
        didSet{
            UserDefaults.standard.set(isVisited,forKey: "isVisited")
        }
    }
    init() {
        self.isVisited = UserDefaults.standard.object(forKey: "isVisited") as? Bool ?? false
    }
@State private var edit = false
@ObservedObject var userSettings = UserSettings()

Button(action: { self.edit.toggle()}) {
                    if self.edit {
                        Image(systemName: "heart.fill").font(.title)
                    } else {
                        Image(systemName: "heart").font(.title)
                    }
                }.foregroundColor(.red)

理想情况下,只要点击“心形”图标,它就会被填充并将数据保存到 UserDefault 数据库中。我只知道Toggle(isOn:..).

的用法

如有任何建议,我们将不胜感激!

你的意思是这样的吗?

class UserSettings: ObservableObject {
    init() {
        isVisited = UserDefaults.standard.bool(forKey: "isVisited")
    }

    @Published var isVisited: Bool {
        didSet {
            UserDefaults.standard.set(isVisited, forKey: "isVisited")
        }
    }
}

struct RootView: View {
    @ObservedObject var userSettings = UserSettings()

    var body: some View {
        Button(action: { self.userSettings.isVisited.toggle() }) {
            if self.userSettings.isVisited {
                Image(systemName: "heart.fill").font(.title)
            } else {
                Image(systemName: "heart").font(.title)
            }
        }.foregroundColor(.red)
    }
}

我在这里所做的是,每次 UserSettings 加载时,我都会从 UserDefaults 加载 isVisited,然后每当设置 属性 时,它都会更新 UserDefaults.

然后在视图上而不是使用 @State 来保存数据我直接从 UserSettings 获取数据,因为它将有最新的数据。