【问题标题】:StateObject as parameter for another object in init()StateObject 作为 init() 中另一个对象的参数
【发布时间】:2021-07-22 06:48:04
【问题描述】:

我试图将 StateObject 用户传递给 authenticationHelper,但我不能,因为 IDE 说“在初始化所有存储的属性之前使用 self”,即使它是在结构的开头初始化的。我考虑过将 user 的初始化移动到 init() 但同样,我不能,因为它是一个 get-only 属性,它必须立即初始化。有解决办法吗?

@main
struct Test: App {
    @StateObject var user: User = User()
    var authenticationHelper: AuthenticationHelper

    init(){
        self.authenticationHelper = AuthenticationHelper(user: user)
    }

    var body: some Scene {
        WindowGroup {
            LoginView(user: user)
        }
    } 
}

【问题讨论】:

  • 你可以试试这个:“var authenticationHelper: AuthenticationHelper?”

标签: swift swiftui state


【解决方案1】:

使用计算属性

struct Test: App {
    
    @StateObject var user: User = User()
    var authenticationHelper: AuthenticationHelper {
        return AuthenticationHelper(user: user)
    }
    
    init() {
    }
}

你也可以这样使用

struct Test: App {
    
    @StateObject var user: User
    var authenticationHelper: AuthenticationHelper
 
    init() {
        let user = User()
        self._user = StateObject(wrappedValue: user)
        self.authenticationHelper = AuthenticationHelper(user: user)
    }
}

【讨论】:

  • 你知道使用计算属性初始化AuthenticationHelper(user: user)init有什么区别吗?
猜你喜欢
  • 2011-03-28
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2017-10-12
  • 2017-12-20
  • 1970-01-01
相关资源
最近更新 更多