2017-02-15 1 views
2

저는 Swift, ReactiveSwift 및 ReactiveCocoa를 사용하고 있습니다.하나의 SignalProducer를 여러 UI 구성 요소에 어떻게 바인딩합니까?

SignalProducer이 하나 있다고 가정하면 Event을 생성 할 때 여러 UI 구성 요소를 업데이트 할 수있는 방법이 있습니까?

예 :

let sp = SignalProducer<Int, NoError> = // ... 
label1.reactive.text <~ sp.map { String($0) } 
label2.reactive.text <~ sp.map { "You entered \(String($0)) } 

나는 현재 직면 문제는 SignalProducer 즉시 나는 <~ 연산자를 사용으로 시작된다는 점이다. 따라서 제작자는 두 번 호출됩니다. 생산자가 말하자면 네트워크 요청 일 때 이것은 바람직하지 않습니다.

답변

4

SignalProducer에 바인딩 된 별도의 MutableProperty를 가질 수 있으며 두 개의 레이블이 MutableProperty에 바인딩됩니다. 당신이 0은 표시하지 않으려면, 당신은 MutableProperty는 옵션 지능

let sp = SignalProducer<Int, NoError> = // ... 
let result = MutableProperty(0) 
label1.reactive.text <~ result.map { String($0) } 
label2.reactive.text <~ result.map { "You entered \(String($0)) } 
result <~ sp 
+0

감사합니다. – sdasdadas

1

나는이 오래되어 이미 대답을 알고 있지만, 속성을 사용하는 대신 사용 startWithSignal입니다 개최 만들 수 :

let sp: SignalProducer<Int, NoError> = // ... 
sp.startWithSignal { (signal, _) in 
    label1.reactive.text <~ signal.map { String($0) } 
    label2.reactive.text <~ signal.map { "You entered \(String($0)) } 
} 
+0

감사! 이것은 유용합니다! – sdasdadas

관련 문제