您如何构建一个 JSON 对象,可以在更新原始引用的同时由多个处理程序传递和修改?
JSON 由 Swift 中的字典和数组支持,它们都是 Struct
数据结构。根据定义,结构是按副本传递的。
这是我写的一个简单的单元测试
func testMutatingJson() {
// Test
var json: JSON = [
"dict": [String: AnyObject]()
]
json["dict"]["A"] = JSON(["key1": "value1"])
json["dict"]["A"]["B"] = JSON(["key2": "value2"])
XCTAssertEqual(json["dict"]["A"]["B"], JSON(["key2": "value2"]))
let wrapper = Wrapper(json: json["dict"])
wrapper.doSomething()
// FAIL: This will fail since json["dict"]["A"]["B"] was copied into `Wrapper`
XCTAssertEqual(json["dict"]["A"]["B"]["C"], JSON(["key3": "value3"]))
}
class Wrapper {
var json: JSON
init(json: JSON) {
self.json = json["A"]["B"]
}
func doSomething() {
self.json["C"] = JSON(["key3", "value3"])
}
}
我需要修改原始 JSON 对象,因为它将在 doSomething()
之后再次处理。
我认为我最好的选择是编写我自己的由 NSMutableDictionary 和 NSMutableArray 支持的 JSON 类。还有其他选择吗?
最佳答案
基本上,您已经有了解决方案 - 创建一个包装器对象,为包含的 JSON 结构提供引用语义。您还可以重构您的代码,这样您就不会保留 JSON 对象的额外副本。
关于ios - 在改变它们的同时传递 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925423/