zoukankan      html  css  js  c++  java
  • SwiftUi:视图绑定

    前言

      @State

      @Binding

       //链式拓展视图

    一.State


      State  用于单结构体视图里面的视图监视绑定

            当变量数据的变化,视图也跟着变化

            涉及到单个 struct视图        

    @State var a : Bool = true
    
    Button(action : 
    {
      self.a.toggle()  
    })
    {
      Text(self.a ? "a" : "b")  
    }

    二.Binding


      Binding  用于父视图和子视图进行数据共享

            当父视图的数据变化,子视图的数据也跟着变化

            当子视图的数据变化,父视图的数据也跟着变化

            涉及到两个 struct视图,一个父视图一个子视图 

    struct fatherView : View
    {
      @State var a : Bool = true
      var body : some View
      {
          VStack
          {
              Text(self.a ? "a" : "b")
              sonView(b : $a)    
          }        
      }      
    }
    
    struct sonView : View
    {
      @Binding var b : Bool
      var body : some View
      {
          Button(action : {
              self.b.toggle()
          })  
          {
              Text(self.b ? "b" : "a")
          }
      }
    }

    三.ObservedObject


      ObservedObject   用于 class 和 struct视图之间的传值

                 当struct视图采用class里面的数据时候,class数据变化,struct视图也会跟着变化

                 涉及到 class数据和 struct父视图

    class fatherClass : ObservableObject
    {
      @Published var c : Bool = true
    
      init(C : Bool)
      {
          self.c = C      
      }        
    func a()
    {
    self.c.toggle()
    }
    }
    struct ContentView : View { @ObservedObject var fatherclass : fatherClass(C : true) var body : some View { Button(action :{ self.fatherclass.c.toggle()
    //self.fatherclass.a() }) { Text(fatherclass.c
    ? "a" : "b") } } }
    class DataSource : ObservableObject
    {
        @Published var counter = 0
    }
    
    
    struct ContentView: View
    {
        @ObservedObject var dataSource = DataSource()
        var body: some View {
            NavigationView
            {
                VStack
                {
                    Button(action:
                    {
                        dataSource.counter += 1
                    })
                    {
                        Text(dataSource.counter.description)
                    }
                    
                }
            }
        }
    }

    四.Environment


      Environment  用于 class 和两个 struct视图之间的传值

               应用于多场景数据分享

               设计到 class数据和 一个stuct 父视图和 struct 子视图

    class DataSource : ObservableObject
    {
        @Published var counter = 0
    }
    
    
    struct ContentView: View
    {
       // let dataSource = DataSource()
        @ObservedObject var dataSource : DataSource = DataSource()
        var body: some View {
            NavigationView
            {
                VStack
                {
                    Button(action:
                    {
                        dataSource.counter += 1
                    })
                    {
                        Text(dataSource.counter.description)
                    }
                    NavigationLink(destination: sonView()) {
                        Text("Enter")
                    }
                    
                }
            }
                .environmentObject(dataSource)
        }
    }
    
    struct sonView : View
    {
        @EnvironmentObject var dataSource : DataSource
        var body : some View
        {
            Text("(dataSource.counter)")
        }
    }
  • 相关阅读:
    容器跨主机网络通信学习笔记(以Flannel为例)
    Kubernetes控制器Job和CronJob
    记一次使用Flannel插件排错历程
    Kubernetes控制器Deployment
    Kubernetes如何通过StatefulSet支持有状态应用?
    react18 来了,我 get 到...
    gojs 实用高级用法
    vuecli3 vue2 保留 webpack 支持 vite 成功实践
    calibre 报错 This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 解决
    unable to recognize "*.yaml": no matches for kind "RoleBinding" in version "rbac.authorization.k8s.io/v1beta1"
  • 原文地址:https://www.cnblogs.com/k5bg/p/14350220.html
Copyright © 2011-2022 走看看