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
相关产品推荐
相关产品推荐

