Jus*_*ock 3 singleton struct swiftui
我想创建一个全局变量来显示加载视图。我尝试了很多不同的方法,但不知道该怎么做。我需要能够在整个应用程序中访问此变量,并在更改单例的布尔值时更新 MotherView 文件。
struct MotherView: View {
@StateObject var viewRouter = ViewRouter()
var body: some View {
if isLoading { //isLoading needs to be on a singleton instance
Loading()
}
switch viewRouter.currentPage {
case .page1:
ContentView()
case .page2:
PostList()
}
}
}
struct MotherView_Previews: PreviewProvider {
static var previews: some View {
MotherView(viewRouter: ViewRouter())
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下面的单例,但它不允许我更新共享实例?如何更新单例实例?
struct LoadingSingleton {
static let shared = LoadingSingleton()
var isLoading = false
private init() { }
}
Run Code Online (Sandbox Code Playgroud)
jn_*_*pdx 11
使您的单例 aObservableObject具有以下@Published属性:
struct ContentView: View {
@StateObject var loading = LoadingSingleton.shared
var body: some View {
if loading.isLoading {
Text("Loading...")
}
ChildView()
Button(action: { loading.isLoading.toggle() }) {
Text("Toggle loading")
}
}
}
struct ChildView : View {
@StateObject var loading = LoadingSingleton.shared
var body: some View {
if loading.isLoading {
Text("Child is loading")
}
}
}
class LoadingSingleton : ObservableObject {
static let shared = LoadingSingleton()
@Published var isLoading = false
private init() { }
}
Run Code Online (Sandbox Code Playgroud)
我应该提到,在 SwiftUI 中,通常使用.environmentObject通过视图层次结构传递依赖项,而不是使用单例——这可能值得研究。