前言
@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)") } }