O componente JsonTrack tem o objetivo registrar todas as modificações realizadas no Json de tal forma a pode reverter as modificações e aplicar novamente caso tenha sido revertido.
O exemplo abaixo irá criar um Json, aplicando algumas mudanças e revertendo
let json = Json([:])
let track = JsonTrack(json: json)
track.apply("a", "b", "c", value: 1)
print(json) // { a: { b: { c: 1 } } }
track.changes.count == 3
track.changes[0] == InsertDictionaryJsonTrackChange(["a"])
track.changes[1] == InsertDictionaryJsonTrackChange(["a", "b"])
track.changes[2] == UpdateJsonTrackChange(["a", "b", "c"], from: nil, to: 1)
track.apply("a", "b", "d", "e", "f", value: 2)
print(json) // { a: { b: { c: 1, d: { e: { f: 2 } } } } }
track.changes.count == 6
track.changes[3] == InsertDictionaryJsonTrackChange(["a", "b", "d"])
track.changes[4] == InsertDictionaryJsonTrackChange(["a", "b", "d", "e"])
track.changes[5] == UpdateJsonTrackChange(["a", "b", "d", "e", "f"], from: nil, to: 2)
track.changes.removeLast().revert(json: json)
print(json) // { a: { b: { c: 1, d: { e: {} } } } }
track.changes.removeLast().revert(json: json)
print(json) // { a: { b: { c: 1, d: {} } } }
track.changes.removeLast().revert(json: json)
print(json) // { a: { b: { c: 1 } } }
track.changes.count == 3
track.changes.removeLast().revert(json: json)
print(json) // { a: { b: {} } }
track.changes.removeLast().revert(json: json)
print(json) // { a: {} }
track.changes.removeLast().revert(json: json)
print(json) // {}
track.changes.count == 0
- Constrói o componente com um Json associado
init(json: Json)
- Campo que retorna o Json que está monitorando
let json: Json
- Retorna todas as mudanças monitorada
let changes: [JsonTrackChange]
- Aplica uma mudança de um caminho atribuindo um valor
func apply(_ paths: IndexLiteral..., value: Literal) -> Self