【问题标题】:Get all KeyPaths for an Object获取对象的所有 KeyPaths
【发布时间】:2021-03-01 01:38:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: swift reflection swift5 mirror keypaths


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多