【问题标题】:How to setup an EnvironmentObject in SwiftUI without SceneDelegate?如何在没有 SceneDelegate 的情况下在 SwiftUI 中设置 EnvironmentObject?
【发布时间】:2023-03-11 13:00:01
【问题描述】:

我想在 SwiftUI 中使用新的 App Protocol @main --> NO Scene 或 AppDelegate 设置 EnvironmentObject。我是否可以在我的内容视图中设置 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)

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

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)

【问题讨论】:

    标签: swiftui swiftui-navigationlink environmentobject


    【解决方案1】:

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

    @StateObject var user : UserData = UserData()
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多