StateObject 作为 init() 中另一个对象的参数

Posted

技术标签:

【中文标题】StateObject 作为 init() 中另一个对象的参数【英文标题】:StateObject as parameter for another object in 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?” 【参考方案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有什么区别吗?

以上是关于StateObject 作为 init() 中另一个对象的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何以 stateobject 作为参数初始化视图?

svn:将已有本地项目上传到svn中另一文件夹

如何查找组中另一组的计数

基于 DataFrame 中另一列的列的滚动总和

获取 ant.design 表列中另一列的值?

如何根据火花DataFrame中另一列的值更改列的值