Как вы можете создать объект JSON, который может передаваться и изменяться несколькими обработчиками, пока исходная ссылка обновляется?
JSON поддерживается Dictionary и Array в 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()
.
Я думаю, что мой лучший вариант — написать собственный класс JSON, поддерживаемый NSMutableDictionary и NSMutableArray. Есть ли другой вариант?
json
!=wrapper.json
Вы изменяете объект в оболочке, но затем тестируете вариант в testMutatingJson. - person Eric Aya   schedule 20.06.2016