将颜色选择器选择传递到SwiftUI中的其他视图
我想我已经很接近了,但也缺少了一些关于SwiftUI和传递数据的基本信息将颜色选择器选择传递到SwiftUI中的其他视图,swiftui,Swiftui,我想我已经很接近了,但也缺少了一些关于SwiftUI和传递数据的基本信息 我有一个名为“masterColor”的顶级颜色变量,我将它放在“DataModel”结构中 然后在我的视图“NightLight”中,我有一个系统“ColorPicker”,在这里我使用本地变量“localColor”来反映ColorPicker具有的任何值 最后,我有一个“BackgroundControllerView”,它设置了一个背景色(我想阅读dataModel.masterColor) 我要做的是将dataM
struct DataModel {
@State var masterColor = Color.red
}
struct NightLight: View {
@Binding var dataModel: DataModel
@State var localColor = Color.blue
var body: some View {
ColorPicker("Pick Color", selection: $localColor)
// Question: somehow set dataModel.masterColor = localColor ??
}
}
struct BackgroundControllerView: View {
@Binding var dataModel: DataModel
var body: some View {
Rectangle()
.fill(dataModel.masterColor)
}
}
非常感谢任何帮助 不需要单独的
localColor
。您可以直接将$dataModel.masterColor
传递给选择器
struct NightLight: View {
@Binding var dataModel: DataModel /// no need for extra `localColor`
var body: some View {
ColorPicker("Pick Color", selection: $dataModel.masterColor)
}
}
另外,从masterColor
中删除@State
——您希望@State
应用于数据模型,而不是内部的属性
struct DataModel {
var masterColor = Color.red /// no @State here
}
struct NightLight: View {
@Binding var dataModel: DataModel
var body: some View {
ColorPicker("Pick Color", selection: $dataModel.masterColor)
}
}
struct BackgroundControllerView: View {
@Binding var dataModel: DataModel
var body: some View {
Rectangle()
.fill(dataModel.masterColor)
}
}
struct ContentView: View {
@State var dataModel = DataModel() /// use `@State` here instead
var body: some View {
VStack {
NightLight(dataModel: $dataModel)
BackgroundControllerView(dataModel: $dataModel)
}
}
}
结果: