0

所以基本上我要做的是以键=值格式列出表视图中对象的所有属性。

但我希望这与对象的未来更改无关,因此如果稍后添加新属性,则不需要对我的代码进行任何更改。

到目前为止,我可以通过 Mirror 访问属性,但是当我尝试通过 value(forKey:) 访问属性时遇到问题,即使该类继承了 NSObject,它也会崩溃:

此类与键的键值编码不兼容

有些属性有效,而另一些则无效,我猜这是因为其中一些是私有的,而另一些是@objc 变量?

那么有没有办法预先验证可以通过 value(forKey:) 访问键(属性) - 所以它不会以崩溃结束,所以如果没有其他方法可以显示可访问属性的值?

更好的是,是否有另一种方式以动态方式访问给定对象的所有属性和值?(处理以后添加的属性)

代码片段:

let properties = Mirror(reflecting: currentUser).children.compactMap { $0.label }
if properties.count > 0 {
    for property in properties {
        if let test = currentUser[property] {
            newData.append( (name: property, value: currentUser.value( forKey: property ).debugDescription) )
        }
    }
}
4

1 回答 1

0

你可以做的是让你的对象符合Encodable. 这样,您可以简单地将其转换为 JSON(或其他格式),然后让您的表格视图动态地从 JSON 中提取所有键和值。

只要将来对对象的任何更改都不会破坏Encodable合规性,表格视图仍然能够解析它接收到的任何 JSON。

于 2018-06-14T14:25:06.660 回答