2017-09-22 6 views
0

SignalProducer 집합 중 하나가 변경 될 때마다 어떻게 한 블록의 코드를 트리거합니까? 즉, 어떻게 내가 내 현재 중복 코드 제거합니까 :여러 신호 생성자 중 하나에서 블록을 트리거하는 방법은 무엇입니까?

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 
} 
+0

약간의 컨텍스트를 추가 할 수 있습니까? 예를 들어, 코드 블록은 속성 값을 모두 사용합니까 아니면 클로저에 전달되는 값만 사용합니까? – jjoelson

+0

죄송합니다, 블록 속성 값을 모두 사용합니다. 내가 명확하게하기 위해 위의 수정했습니다. – ozool

답변

0

당신은 두 값을 모두 포함하는 새로운 속성을 만들 combineLatest를 사용할 수 있습니다

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

이 두 값이 변경되면, 블록

트리거됩니다.

+0

완벽하게 고마워요. – ozool

0

당신은, 변수로 코드 블록을 저장할 수 있습니다 당신은 단순히 property1.producer.startWithValues에 그 변수를 할당합니다.

+0

블록을 변수로 저장 한 다음 두 위치에서 모두 사용한다는 의미입니까? 두 속성 중 하나가 변경 될 때 단일 블록을 실행하는 방법이 있어야하는 것처럼 보입니다. "두 속성 중 하나라도 변경하면이 블록을 실행하십시오"라고 말하는 방법이 있습니다 ... – ozool