如何在没有 SceneDelegate 的情况下在 SwiftUI 中设置 EnvironmentObject?

问题描述

我想在 SwiftUI 中使用新的 App 协议 @main 设置 EnvironmentObject --> NO Scene 或 AppDelegate。我可以在我的内容视图中设置 EnvironmentsObjects,而不是我的 @main .swift 吗?如果是?为什么我不能在我的 NavigationLink 中传入环境对象(如您所见)并且 Swift 要我手动将数据放入,我想传递给 LoadingPage()。

非常感谢!

import SwiftUI

struct ContentView: View {
    //MARK: Properties
    

    
    var body: some View {
        let user = UserData()
        //MARK: BODY
        TextPage().environmentObject(user)

在 TextPage() 上,我想在 NavLink 中调用 LoadingPage()

import SwiftUI
import Combine

struct TextPage: View {
    
    //MARK: Properties
    @EnvironmentObject var user : UserData
    
    @Observedobject var post = Anfrage()
    
    @State var checkData = false // checkInput Var

    var body: some View {
        
        //MARK: Body
        NavigationView{
        
            vstack (alignment: .center,spacing: 30) {
            
   
            //NAV LINK
            NavigationLink(                                 
                destination: LoadingPage().environmentObject(user),isActive: $checkData) { EmptyView() }
                
```
And this is what Swift suggests me to correct:
LoadingPage(user: <#Environment<UserData>#>).environmentObject(user)

解决方法

在您的 StateObject 中使用 ContentView,然后将其作为 EnvironmentObject 传递

@StateObject var user : UserData = UserData()

顺便说一句,如果您在 init 中使用 body 变量,每当任何带有包装器的属性重新加载正文时,它们都会重新初始化。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...