Używam SWIFT, Reactipwift i Reactivecoca.

Zakładając, że mam pojedynczy SignalProducer, czy istnieje sposób na aktualizację wielu komponentów interfejsu użytkownika, gdy produkuje się Event?

Na przykład.

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

Problem, z którym obecnie stawiam, że jest to, że SignalProducer jest uruchomiona, gdy tylko użyję operatora <~. Jako taki producent jest wywoływany dwa razy. To nie jest pożądane, gdy producent jest, powiedzmy, żądanie sieci.

2
sdasdadas 15 luty 2017, 17:34

2 odpowiedzi

Najlepsza odpowiedź

Można mieć oddzielną mutableproperty, która jest związana z SIGNALDProdurem i mają dwa etykiety wiążą się z tym zamualniproperty. Jeśli nie chcesz, aby 0 pojawi się, możesz dokonać mutableProperty utrzymywać opcjonalny int

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
4
tkuichooseyou 16 luty 2017, 01:35

Wiem, że to jest stare i już odpowiedział, ale alternatywą dla korzystania z nieruchomości jest użycie 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)) }
}
2
jjoelson 4 maj 2017, 18:48