场景:
我有一个大的视图,我想分解为一个包含几个子视图的容器视图。
因此,每个视图都有其自己的.string文件。范例:将过程从一个文件传播到孩子们,作为“集体”。
容器视图将充当中心,情报。
我不希望这过于复杂。仅将逻辑模块化在离散零件中,易于维护。
问题:我只能在结构视图之间进行单向 @State ---> @Binding,而无需通过类对象。
有没有办法返回值?例如双向数据交换?
也就是说,子视图是否与父/容器共享其共同的视图?
View1 | View2 & View2 | View1 <br/>
@State -->@Binding (data) & @Binding <-- @State (result)?
我必须使用某种单例类对象进行数据交换吗?
同样,我是为了简化设计而不是大型单个结构视图。
绑定是将值从子级“返回”到父级的方式。如果孩子没有更新值(即,仅一种方式)parent -> child
,则不需要绑定-只需在init中传递变量即可。
struct Child: View {
@Binding var num: Int
var body: some View {
VStack {
Text("\(num)")
Button("increase") { self.num += 1 }
}
}
}
struct Parent: View {
@State var sharedNum: Int = 0
var body: some View {
VStack {
Text("\(sharedNum)")
Child(num: $sharedNum)
Child(num: $sharedNum)
}
.onChange(of: sharedNum) { print("shared num", $0) } // iOS14 required
}
}
无论哪个孩子更改了它,孩子和父母都将显示相同的数字。
但是,有时孩子可能不一定需要通过更改值来通知父母。然后,您可以使用回调:
struct Child: View {
var onClick: (Int) -> Void
var body: some View {
Button("generate random") {
onClick(Int.random(1...100))
}
}
}
struct Parent: View {
var body: some View {
Child {
print("new random", $0)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句