Нет единственной доступной функции, которая делает это, но вы можете реализовать это, используя combinePrevious
:
let change = producer.combinePrevious([]).map { (previous, current) in
// Calculate change
return change
}
Однако, как вы вычисляете изменение между предыдущим массивом и текущим массивом, зависито том, что именно означает «только новые изменения» в вашем контексте.
Хотите ли вы элементы, которые были добавлены?Элементы, которые были удалены?Допускаются ли дубликаты?Имеет ли значение позиция и имеет ли это изменение включение позиции?
Если вам нужны только элементы, которые были добавлены и не имеют дубликатов, я предлагаю использовать Set
вместо Array
Например:
let p = MutableProperty([1, 2, 3])
let added = p.producer.map(Set.init)
.combinePrevious([])
.map { (previous, current) in
return current.subtracting(previous)
}
added.startWithValues { print($0) }
p.value = [1, 2, 3, 4]
p.value = [2, 4]
p.value = [1, 2, 3, 4, 5, 6]