我在属性包装器中有一个带有两个变量的结构。其中一个变量应该是从另一个变量中计算出来的。当我尝试这样做时,我收到以下错误:
不能在属性初始值设定项中使用实例成员“名称”;属性初始化程序在 'self' 可用之前运行。
我尝试为这些变量分配一个临时值,然后在自定义init()
函数中重新分配它们,但这似乎不起作用。我制作了代码的简化版本,看看是否可以隔离问题。
import SwiftUI
struct Person {
@State var name: String = ""
@State var nameTag: NameTag = NameTag(words: "")
init(name: String) {
// not changing name and nameTag
self.name = name
nameTag = NameTag(words: "Hi, my name is \(name).")
}
}
class NameTag {
var words: String
init(words: String) {
self.words = words
}
}
var me = Person(name: "Myself")
// still set to initial values
me.name
me.nameTag.words
我注意到,当我将 nameTag 更改为@ObservedObject
,而不是@State
时,它能够被正确地重新分配。虽然我不相信我可以将名称更改为@ObservedObject
. 谁能告诉我我做错了什么?