首页 > 解决方案 > 在 SwiftUI 开始渲染 ContentView 之前,我们如何从 Views 中独立运行一些逻辑?

问题描述

我想知道如何在 SwiftUI 尝试呈现 ContentView 之前运行一些逻辑函数或控制流运算符?我可以在哪里以及如何放置我的代码?

更新: init(){} before var body: some Scene

当我使用 init 并在那里执行我的逻辑时,我找不到报告我的过程结果的方法,我该如何解决这个问题?

我的代码:

    import SwiftUI

@main
struct _99App: App
{
    init() {
        let firstName = "omid"
        print(firstName)
    }
    
    @State var name : String = firstName // ← Here        Error: Cannot find 'firstName' in scope
    
    
    var body: some Scene {

        WindowGroup {
            
            ContentView(name: $name)
                
        }
 
        
        
    }
}

PS:基本上我需要一个地方在应用程序发生任何事情之前运行我的逻辑。

标签: swiftui

解决方案


您可以使用某种ObservableObjectasStateObject将在其他所有内容之前初始化。

所以解决方案可能如下所示

let globalState = MyAppState()

@main
struct _99App: App
{
    @StateObject var appState = globalState
    
    init() {
       globalState.firstName = "updated"
        print("updated")
    }

    var body: some Scene {
        WindowGroup {
            ContentView().environmentObject(appState)
            // and use as
            // @EnvironmentObject var appState: MyAppState
            // inside ContentView
        }
    }
}

class MyAppState: ObservableObject {
    @Published var firstName: String
    
    init() {
        self.firstName = "omid"
        print(firstName)
    }
}

推荐阅读