Swift 以不同方式初始化图像变量不起作用
Swift initializing image variables differently does not work
我有一个 JSON 文件,其中有两个图标名称:normal
和 active
。
我用它们来获取系统图标,我想将其放入图像数组中。
当我分别加载它们时,它工作得很好:
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
我有一个 JSON 文件,其中有两个图标名称:normal
和 active
。
我用它们来获取系统图标,我想将其放入图像数组中。
当我分别加载它们时,它工作得很好:
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