swift - 获取对象的所有 KeyPaths
问题描述
Swift 5 中有没有办法遍历所有键路径?我知道Mirror
会给你键的字符串表示,但我不能使用setValue
,因为我的对象不是继承自NSObject
并且几个值不@objc
兼容。我正在尝试执行以下操作(伪编码):
func overwrite(source:T, overwrite:T) {
for keypath in overwrite.allKeypaths() {
source[keyPath: keyPath] = overwrite[keyPath: keyPath]
}
}
这里的最终目标是首先在现有对象中创建一个浅拷贝,并可能将其扩展为包含基于值类型的深层拷贝。
解决方案
这在 Swift 中是不可能的。无法获取给定对象上的所有键路径。但是,您可以使用Mirror
查看对象的所有属性来获取objective-c 对象的字符串表示形式。但是,并非所有值类型都可以使用setValue
这种方式设置,因为并非所有 Swift 类型都转换为 Objective-c。
推荐阅读
- flutter - 颤振表单订阅验证器中的任何验证更改以禁用提交按钮
- database - 在数据库中存储嵌套信息的最佳方式
- javascript - 错误 TS2349:无法调用其类型缺少调用签名的表达式。类型 '{ ; }' 没有兼容的调用签名
- python - 更改具有两种日期格式的数据框的格式
- arrays - 仅使用 Excel 公式,如何计算满足多个条件(包括计数)的行数?
- json - 使用 Groovy 解析 JSON 响应并根据字符数和其他条件过滤元素
- python - 如何打印字符串列表字典
- java - java中有没有办法在方法运行时检测整数变化并运行所述方法,然后返回同一位置
- swift - 对于更复杂的 ORDER BY 语句,是否有用于 Swift 的 SQLite 方法?
- rest - Symfony 5:服务器无法发送响应:确保后端正常工作