You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 单独初始化Image属性正常 存入数组报错原因是什么

问题原因解析
  • 计算属性的运行时机特性
    你之前定义的normal_icon、active_icon属于计算属性,这类属性不会在实例初始化阶段分配存储空间存储值,你写的Image(systemName: normal_name)只是定义了属性被访问时的取值逻辑,这段代码只有当你实际调用某一个实例的normal_icon属性时才会执行,此时实例已经完成初始化,self完全可用,自然可以正常访问normal_name等实例成员。
  • 存储属性的初始化规则限制
    你最初写的var icon: [Image] = [xxx]属于存储属性,等号后的数组初始化代码是属性的初始化表达式,会在实例初始化过程中、self被完全构造完成前执行,此时还不允许访问self的任何实例成员(不管是存储属性normal_name还是计算属性normal_icon都属于实例成员,此时不可用),因此触发报错。

解决方案

你只需要把icon也改成计算属性即可,和之前的单个图标属性逻辑一致:

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

如果确实需要存储属性,可以将赋值逻辑放到自定义构造器中,等所有存储属性都完成初始化后再给icon赋值。
另外注意你当前代码里有个笔误:active_icon的取值里用了normal_name,会导致两个图标完全一致,记得改成active_name。


内容的提问来源于stack exchange,提问作者Lae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:57:03