SwiftUI 如何将全局变量传递给非视图 类
SwiftUI How to pass a global variable to non-View classes
我了解如何使用 @EnvironmentObject 使全局数据可用于任何视图 class,但我找不到将变量传递给非视图的方法 class。
我的情况是:
- 登录,returns 访问令牌。此令牌需要在所有后续 api 调用中使用
- 在 UserSettings 中存储访问令牌 class
- 将 UserSettings 放入环境桶中
let contentView = ContentView()
.environmentObject(UserSettings())
- 每个视图将根据 api 调用
中返回的数据显示数据
struct HomeView: View {
@EnvironmentObject var user: UserSettings <=== ACCESS TO GLOBAL DATA
@ObservedObject var categories = Categories() <=== GET DATA FOR THIS VIEW
var body: some View {
...
}
- Categories() 是一个非视图 Swift class,它将检索数据,但需要存储在 UserSettings
中的访问令牌
class Categories : ObservableObject {
@Published var allCategories = CategoriesModel()
@EnvironmentObject var user: UserSettings <==== CANNOT ACCESS THIS DATA!
init() {
fetchCategories(page: 0, pageSize: 20)
}
UserSettings 为空,因为此 class 不是 View 结构并且其行为似乎不像 View class 那样。由于我需要的访问令牌存储在 UserSettings class 中,我如何才能访问它? store/access 此数据是否有替代方法?
使用单例模式。从 Categories
& let contentView = ContentView().environmentObject(UserSettings.sharedInstance)
调用 UserSettings.sharedInstance
我了解如何使用 @EnvironmentObject 使全局数据可用于任何视图 class,但我找不到将变量传递给非视图的方法 class。
我的情况是:
- 登录,returns 访问令牌。此令牌需要在所有后续 api 调用中使用
- 在 UserSettings 中存储访问令牌 class
- 将 UserSettings 放入环境桶中
let contentView = ContentView()
.environmentObject(UserSettings())
- 每个视图将根据 api 调用 中返回的数据显示数据
struct HomeView: View {
@EnvironmentObject var user: UserSettings <=== ACCESS TO GLOBAL DATA
@ObservedObject var categories = Categories() <=== GET DATA FOR THIS VIEW
var body: some View {
...
}
- Categories() 是一个非视图 Swift class,它将检索数据,但需要存储在 UserSettings 中的访问令牌
class Categories : ObservableObject {
@Published var allCategories = CategoriesModel()
@EnvironmentObject var user: UserSettings <==== CANNOT ACCESS THIS DATA!
init() {
fetchCategories(page: 0, pageSize: 20)
}
UserSettings 为空,因为此 class 不是 View 结构并且其行为似乎不像 View class 那样。由于我需要的访问令牌存储在 UserSettings class 中,我如何才能访问它? store/access 此数据是否有替代方法?
使用单例模式。从 Categories
& let contentView = ContentView().environmentObject(UserSettings.sharedInstance)
UserSettings.sharedInstance