我可以使用镜像设置Swift对象属性的值吗?

Ran*_*dex 8 json mirror mirroring swift swift2

现在我可以使用Mirror类型检查对象的变量.但是我可以使用镜像为变量设置值吗?或许还有另一种纯粹的Swift方式?

例如,我想struct从JSON 创建一个对象(一个Swift ).没有子类化NSObject并使用Objective-C函数可以吗?

小智 5

这是我目前能做的最好的事情。它仍然缺少将mirrorObject转换回其通用类型。仅供参考,这是使用 SwiftyJSON

func convertToObject<T>(json: JSON, genericObject: T) -> T {
    let mirroredObject = Mirror(reflecting: genericObject)

    for (_, var attr) in mirroredObject.children.enumerate() {
        if let propertyName = attr.label as String! {
            attr.value = json[propertyName]
            print(propertyName)
            print(attr.value)
        }
    }
    // Figure out how to convert back to object type...
}
Run Code Online (Sandbox Code Playgroud)

  • @Randex 弄清楚如何转换回对象类型部分是最困难的部分。除非您想为您创建的每种类型进行自定义扩展。在 swift 4 中有 Decodable 和 Encodable。这些可以动态地做到这一点。 (4认同)