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

