动态访问所有类属性值

时间:2018-06-14 14:11:30

标签: ios swift class-properties

所以基本上我要做的就是以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) )
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

只要对象的任何未来更改都不会违反Encodable合规性,表视图仍然可以解析它收到的任何JSON。

相关问题