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)") } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)