有一个里面有字段的类,我想通过 Swift Reflection 命名为 Mirror 获取所有字段并用新值更改, 我可以获得类 name 和 value
的所有 childlet m = Mirror(reflecting: self)
for item in m.children {
print("\(item.name) \(item.value)")
}
但不是改变变量的值:
let m = Mirror(reflecting: self)
for item in m.children {
item.value = "new Value"
}
并给出一个错误,因为字段是不可变的:
Cannot assign to property: 'item' is a 'let' constant
有没有办法通过 Mirror 改变值是 Swift 吗?
虽然 Java 有能力通过反射
完成这项工作更新
我在循环中使用 var
并且可以更改值但值字段在类中没有更改。
let m = Mirror(reflecting: self)
for var item in m.children {
item.value = "new Value"
}
最佳答案
我找到了一个解决方案。我觉得对你有帮助
func toJSON() throws -> Any? {
let mirror = Mirror(reflecting: self)
guard !mirror.children.isEmpty else { return self }
var result: [String: Any] = [:]
for child in mirror.children {
if let value = child.value as? JSONSerializable {
if let key = child.label {
result[key] = try value.toJSON()
} else {
throw CouldNotSerializeError.undefinedKey(source: self, type: String(describing: type(of: child.value)))
}
} else {
throw CouldNotSerializeError.noImplementation(source: self, type: String(describing: type(of: child.value)))
}
}
return result
}
关于swift - 如何通过镜像更改变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51017443/