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

Swift:如何避免父类重复初始化子类已赋值的属性?

Swift父类初始化性能优化与可选类型问题

我有一个Swift父类SomeClass,它声明了基于自定义包装类型的字典属性:

class SomeClass {
    var styleOptions: EntityDictionary<RenderKey, Any>
    var options: EntityDictionary<RenderCriteria.Option, Any>
    
    init(_ someClass: SomeClass? = nil) {
        if someClass == nil {
            styleOptions = EntityDictionary([:])
            options = EntityDictionary([:])
        } else {
            styleOptions = someClass.styleOptions
            options = someClass.options
        }
    }
}

根据设计,SomeClass的子类始终会为所有属性提供初始值。但目前父类的初始化逻辑会先创建空的包装字典,子类初始化时又会覆盖这些值,造成了不必要的性能浪费,我找不到避免这种重复初始化的方法。

另外有个疑问:初始化空字典(包括这种自定义包装的字典)的开销到底有多大?

我尝试过使用override和required关键字,但遇到了两难:Swift要求在调用super.init()之前必须初始化所有属性,但子类初始化时似乎需要借助self来设置父类定义的属性,这就产生了矛盾。

还有,如果是原生Swift字典,我可以在父类里这样声明:

var styleOptions: [RenderKey: Any]! = nil

这样子类就不需要调用super.init()。但对EntityDictionary用类似写法var styleOptions: EntityDictionary<RenderKey, Any>! = nil时,Swift会报错,我不确定正确的处理方式,甚至不知道有没有可行的解决办法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:30:52