swiftui - 我可以在 SwiftUI 中对所有共享数据使用 @EnvironmentObject 吗?
问题描述
有@State
,@ObservedObject
和@EnvironmentObject
绑定在SwfitUI
视图和其他对象之间共享数据。每个都有其指定的用途,但@EnvironmentObject
似乎是最强大和最容易使用的。那么,我可以将它用于所有状态变量和共享数据吗?这有什么缺点吗?
解决方案
首先,@EnvironmentObject
是为了上课。所以如果你想绑定像 Int 这样的原始类型 - 你只能使用Binding
. 其次,我认为当您尝试定义多个@EnvironmentObject
相同类型时会出现问题。所以,当你可以使用Binding
- 你应该这样做。那只是我的意见。
class SomeClass: ObservableObject{
@Published var value: Int
init(value: Int){
self.value = value
}
}
struct ContentView: View {
@State var one: SomeClass = SomeClass(value: 1)
@State var two: SomeClass = SomeClass(value: 2)
var body: some View {
Adss().environmentObject(one).environmentObject(two)
}
}
struct Adss: View{
@EnvironmentObject var two: SomeClass
var body: some View{
Text("there must be two: \(two.value)")//prints "1"
}
}
即使您不需要它们,您也必须按顺序定义所需类型的所有对象
推荐阅读
- php - PHP搜索许多输入
- wix - 默认序列号,它是由什么决定的?
- javascript - 在移动设备上禁用 div 中的滚动
- ios - 仅在模拟器 iPhone6 中首次启动时出现位置权限问题 - XCode 9.4.1
- sql - 通过参数传递列名时删除引号
- java - IntelliJ 中的缩短命令行不起作用
- java - SqlException: DELETE on table 'COUPON' caused a violation of foreign key constraint
- java - Mediastore albums and media columns
- angularjs - Comparing two object arrays in angular ng-repeat
- javascript - 浏览器性能问题以及使用 Bodymovin 和 CSS 动画