首页 > 解决方案 > 通过 KeyPath / WritableKeyPath 快速初始化

问题描述

有没有办法通过 Key Path 设置属性来初始化 Swift 类型?

struct SomeStruct {
    var number: Int
    
    init(to number: Int) {
        self.number = number // ok
    }
    
    init(viaKeyPathTo number: Int) {
        self[keyPath: \.number] = number // error
    }
}

尝试通过密钥路径初始化失败并出现以下错误:

'self' 在所有存储属性初始化之前使用
从初始化程序返回而不初始化所有存储属性

如果该属性使用let而不是var,则会给出错误:

无法通过下标赋值:关键路径是只读的

通过键路径设置属性init似乎不起作用。为什么不?有什么解决方法吗?

这个问题是否在开源 Swift Evolution 过程中被讨论或提出过?

标签: swiftinitializationkvckeypathsswift-keypath

解决方案


推荐阅读