Swift 以不同方式初始化图像变量不起作用

Swift initializing image variables differently does not work

我有一个 JSON 文件,其中有两个图标名称:normalactive。 我用它们来获取系统图标,我想将其放入图像数组中。 当我分别加载它们时,它工作得很好:

struct loadData: Hashable, Codable {

    //load some data...

    private var normal_name: String
    private var active_name: String

    var normal_icon: Image {
        Image(systemName: normal_name)
    }
    var active_icon: Image {
        Image(systemName: normal_name)
    }
}

当我尝试将获取的图像放入数组时,它会抛出错误:

var icon: [Image] = [
    normal_icon,
    active_icon
]

即使我尝试直接加载它们,它仍然会抛出相同的错误:

var icon: [Image] = [
    Image(systemName: normal_name),
    Image(systemName: normal_name)
]

我得到的错误是这样的:

Cannot use instance member 'normal_icon' within property initializer; property initializers run before 'self' is available

我知道我可以使用计算 属性 来解决这个问题,我的问题是:

为什么我允许初始化字符串 (normal_name) 然后初始化图像 (normal_icon) 而不会出现错误,但是当我在数组中执行时它不起作用?

您没有向我们展示代码所在的上下文:

var icon: [Image] = [
  normal_icon,
  active_icon
]

活着,但你在这样做吗?:

struct loadData: Hashable, Codable {

    //load some data...

    private var normal_name: String
    private var active_name: String

    var icon: [Image] = [
      normal_icon,
      active_icon
    ]
}

如果是这样,那么您必须意识到数组声明中的 normal_icon 实际上是对 self.normal_icon 的引用,因此它在尝试设置字段时引用 self icon。但是对象的字段在self可用之前被初始化,所以你

Cannot use instance member 'normal_icon' within property initializer; property initializers run before 'self' is available