Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 在容器视图中共享公共变量_Swiftui - Fatal编程技术网

Swiftui 在容器视图中共享公共变量

Swiftui 在容器视图中共享公共变量,swiftui,Swiftui,场景: 我有一个大视图,我想将其分解为一个容器视图,其中包含两个子视图。 因此每个视图都有自己的.string文件。 范例:将过程从一个文件作为“集体”传播给儿童 容器视图将充当中心,即智能。 我不希望这过于复杂;只需将逻辑模块化为分立部件,便于维护。 问题:我只能在结构视图之间进行单向@State-->@绑定,而不能通过类对象 是否有返回值的方法;e、 例如,双向数据交换? 也就是说,子视图与父视图/容器共享其公共视图? View1 | View2 &

场景:
我有一个大视图,我想将其分解为一个容器视图,其中包含两个子视图。
因此每个视图都有自己的.string文件。 范例:将过程从一个文件作为“集体”传播给儿童

容器视图将充当中心,即智能。 我不希望这过于复杂;只需将逻辑模块化为分立部件,便于维护。 问题:我只能在结构视图之间进行单向@State-->@绑定,而不能通过类对象
是否有返回值的方法;e、 例如,双向数据交换?
也就是说,子视图与父视图/容器共享其公共视图?
 View1  |  View2          &   View2     |   View1 <br/>
@State -->@Binding (data) & @Binding <-- @State (result)?
View1 | View2&View2 | View1
@状态-->@Binding(data)&@BindingBinding是值从子对象“返回”到父对象的方式。如果子级没有更新该值(即,只需单向
父级->子级
),则不需要绑定-只需在init中传递变量即可

无论哪个子级更改了数字,子级和父级都将显示相同的数字


但是,有时孩子可能需要通知家长,而不一定通过值更改。然后您可以使用回调:

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)
      }
   }
}

看看这是否对您有帮助:。绑定是子级返回值的方式。要从子级调用父级,通常需要使用回调,也可以使用绑定值。。。我刚换了。当然应该是
Child(num:$sharedNum)
我刚刚发现自己;但我的评论在更改之前就超时了。非常感谢!
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)
      }
   }
}