首页 > 解决方案 > 获取对象的所有 KeyPaths

问题描述

Swift 5 中有没有办法遍历所有键路径?我知道Mirror会给你键的字符串表示,但我不能使用setValue,因为我的对象不是继承自NSObject并且几个值不@objc兼容。我正在尝试执行以下操作(伪编码):

func overwrite(source:T, overwrite:T) {
  for keypath in overwrite.allKeypaths() {
    source[keyPath: keyPath] = overwrite[keyPath: keyPath]
  }
}

这里的最终目标是首先在现有对象中创建一个浅拷贝,并可能将其扩展为包含基于值类型的深层拷贝。

标签: swiftreflectionswift5mirrorkeypaths

解决方案


这在 Swift 中是不可能的。无法获取给定对象上的所有键路径。但是,您可以使用Mirror查看对象的所有属性来获取objective-c 对象的字符串表示形式。但是,并非所有值类型都可以使用setValue这种方式设置,因为并非所有 Swift 类型都转换为 Objective-c。


推荐阅读