所以基本上我要做的就是以key = value格式列出tableview中对象的所有属性。
但我希望这可以独立于对象的未来更改,因此如果稍后添加新属性,我的代码将不需要进行任何更改。
到目前为止,我可以通过Mirror访问这些属性,但是当我尝试通过值(forKey :)访问属性时遇到问题,即使该类继承了NSObject它崩溃了:
此类不是密钥值编码兼容的密钥
有些属性可以正常工作而其他属性却没有,我猜这些属性是私有的,还有其他的@objc变量?
那么有没有办法预先验证可以通过值(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) )
}
}
}
答案 0 :(得分:0)
您可以做的是让您的对象符合Encodable
。这样,您可以简单地将其转换为JSON(或其他一些格式),然后让您的表视图动态地从JSON中提取所有键和值。
只要对象的任何未来更改都不会违反Encodable
合规性,表视图仍然可以解析它收到的任何JSON。