Как вызвать блокировку от любого из нескольких производителей сигналов?

Как запустить один блок кода при изменении любого из набора SignalProducers? Другими словами, как мне избавиться от моего текущего избыточного кода:

property1.producer.startWithValues { (value) in 
    // do stuff with property1.value and property2.value
}

property2.producer.startWithValues { (value) in 
    // do the same stuff with property1.value and property2.value
}

2 ответа

Решение

Ты можешь использовать combineLatest создать новое свойство, которое содержит оба значения:

let prop = property1.combineLatest(with: property2)
prop.producer.startWithValues { (val1, val2) in
    // do stuff here
}

Если какое-либо значение изменится, блок будет запущен.

Вы можете сохранить блок кода как переменную, а затем просто присвоить эту переменную property1.producer.startWithValues,

Другие вопросы по тегам