【问题标题】:Swift initializing image variables differently does not workSwift以不同方式初始化图像变量不起作用
【发布时间】:2021-11-17 05:04:47
【问题描述】:

我有一个 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)
]

我得到的错误是这样的:

不能在属性初始化器中使用实例成员“normal_icon”;属性初始化器在“self”可用之前运行

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

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

【问题讨论】:

  • 因为norrmal_iconnormal_name 是计算属性,而icon 是存储属性。
  • 您可以将图标重构为计算属性。

标签: arrays swift initialization


【解决方案1】:

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

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 的引用,因此它在尝试设置字段icon 时引用了self。但是对象的字段在之前被初始化,self 可用,所以你

不能在属性初始化器中使用实例成员“normal_icon”;属性初始化器在“self”可用之前运行

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多