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

Как запускать один блок кода всякий раз, когда изменяется любой из набора 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
}

person ozool    schedule 22.09.2017    source источник
comment
Можете ли вы добавить немного контекста? Например, использует ли блок кода значения обоих свойств или только значение, которое передается замыканию?   -  person jjoelson    schedule 22.09.2017
comment
Извините, блок использует оба значения свойства. Я изменил вышеизложенное, чтобы уточнить.   -  person ozool    schedule 23.09.2017


Ответы (2)


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

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

Если какое-либо значение изменится, блок сработает.

person jjoelson    schedule 23.09.2017

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

person achi    schedule 22.09.2017
comment
Вы имеете в виду сохранить блок как переменную, а затем использовать его в обоих местах? Кажется, должен быть способ запустить один блок при изменении любого свойства. Какой-то способ сказать, что если какое-либо свойство изменяется, запустите этот блок... - person ozool; 23.09.2017