Мониторинг изменений объекта массива

Я понятия не имею, возможно ли это вообще, но это избавит меня от большого стресса и плохого кода. Можно ли отслеживать, когда массив обновляется? Например, метод A изменяет массив a=[1,2,3] на a=[1,2,3,4], возможно ли иметь какой-то делегат, который запускается при обновлении a?

Ответ 1

Если ваш массив является свойством в вашем классе, вы можете использовать наблюдателей свойств. willSet вызывается перед изменением, thenSet вызывается. Это действительно легко.

var myArray:[Int] = [1, 3, 4] {
    didSet {
        println("arrayChanged")
    }
}

Это изменит массив печати, если я добавлю Int, remove и Int и т.д. Я обычно помещаю его в одну строку:

var myArray:[Int] = [1, 3, 4] { didSet { println("arrayChanged") } }