如何检测 SwiftUI ColorPicker 的颜色何时更新?

fin*_*inn 3 swiftui

我正在使用 SwiftUI,并希望在使用 ColorPicker 选择颜色后立即将其保存到 UserDefaults 中。做这个的最好方式是什么?

struct CustomizeView: View {
    
    @State private var color: Color = Color.green
    
    var body: some View {
            ColorPicker("Select a color!", selection: $color, supportsOpacity: false)
        }.onAppear {
            guard let defaults = UserDefaults(suiteName: "...") else { return }
            color = Color(rgb: defaults.integer(forKey: "color"))
        }
    }

    // where do I call the saveColors() function?
    
    func saveColors() {
        guard let defaults = UserDefaults(suiteName: "...") else { return }
        defaults.set(color.rgb, forKey: "colorCancel")
        defaults.synchronize()
    }
}
Run Code Online (Sandbox Code Playgroud)

(颜色的 rgb 初始值设定项是自定义的,不应该相关。)

Asp*_*eri 5

您可以使用onChange修饰符,例如

ColorPicker("Select a color!", selection: $color, supportsOpacity: false)
   .onChange(of: color) { _ in
      saveColors()
   }

Run Code Online (Sandbox Code Playgroud)