Open djk3000 opened 3 years ago
swift的数据状态和绑定我一开始看了一下,现在还是专门写一下记录一下。 数据状态和绑定分为以下几个:@State、@StateObject、@Binding、@ObservedObject、@EnvironmentObject 个人理解: @State -- 内部状态的存储(值类型) @StateObject -- 内部状态的存储(引用类型) @Binding -- 父视图传递给子视图的状态存储 @ObservedObject -- 父视图传递给子视图的状态共享 @EnvironmentObject -- 多个视图间的视图共享 上个代码例子: 父view:
import SwiftUI struct ContentView: View { @State var isClick = false @StateObject var user:UserData = UserData() @ObservedObject var userData:UserData = UserData() @EnvironmentObject var userDataPublic:UserDataPublic var body: some View { VStack{ Text("Hello, world?: \(self.isClick ? "Yes":"No")") .padding() Text("username:\(self.user.userName)") Text("usernameObserved:\(self.userData.userName)") Text("usernamePublic:\(self.userDataPublic.userName)") ChildView(click:$isClick,userName: $userData.userName) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() .environmentObject(UserDataPublic()) } }
子view:
import SwiftUI struct ChildView: View { @Binding var click:Bool @Binding var userName:String @StateObject var user:UserData = UserData() @EnvironmentObject var userNamePublic:UserDataPublic var body: some View { VStack{ Button("click") { self.click.toggle() if(self.click){ self.userName = "chenfeng123" self.userNamePublic.userName = "djk123" self.user.userName = "chenfeng000" }else{ self.userName = "chenfeng456" self.userNamePublic.userName = "djk456" self.user.userName = "chenfeng111" } } Text("username:\(self.user.userName)") } } } struct ChildView_Previews: PreviewProvider { static var previews: some View { ChildView(click: Binding.constant(false),userName: Binding.constant("")) .environmentObject(UserDataPublic()) } }
上面包含了所有的应用,我都实验了一下,相互之间view的传值应该一直要用的
邓兄强啊
swift的数据状态和绑定我一开始看了一下,现在还是专门写一下记录一下。 数据状态和绑定分为以下几个:@State、@StateObject、@Binding、@ObservedObject、@EnvironmentObject 个人理解: @State -- 内部状态的存储(值类型) @StateObject -- 内部状态的存储(引用类型) @Binding -- 父视图传递给子视图的状态存储 @ObservedObject -- 父视图传递给子视图的状态共享 @EnvironmentObject -- 多个视图间的视图共享 上个代码例子: 父view:
子view:
上面包含了所有的应用,我都实验了一下,相互之间view的传值应该一直要用的