gpt4 book ai didi

swift - 如何通过镜像更改变量的值?

转载 作者:行者123 更新时间:2023-11-28 05:57:33 25 4
gpt4 key购买 nike

有一个里面有字段的类,我想通过 Swift Reflection 命名为 Mirror 获取所有字段并用新值更改,我可以获得类 namevalue

的所有 child
let 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com