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)")
        }
    }
  • 相关阅读:
    Xshell安装教程及Xshell安装程序集组件时出错的解决方法
    Xshell远程连接的具体操作和Xshell多会话设置小技巧
    VMware中出现物理内存不足,无法使用配置的设置开启虚拟机解决方案
    在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)
    Sublime Text编辑器配置Python解释器简易教程
    虚拟机创建后该如何获取IP地址并访问互联网实用教程
    关于Scrapy爬虫项目运行和调试的小技巧(下篇)
    Spring的xml和注解对比
    Spring5.X的注解配置项目
    Spring的AOP快速实现通用日志打印
  • 原文地址:https://www.cnblogs.com/k5bg/p/14350220.html
Copyright © 2011-2022 走看看