J'essaie d'envoyer un signal d'un ViewModel à un autre. Fondamentalement, je veux que le second ViewModel utilise le même signal que le premier ViewModel, mais j'ai aussi besoin de la valeur initiale à l'état init dans le second ViewModel. Jusqu'à présent, j'ai réussi à résoudre ce problème en envoyant le Signal<Person, NoError>
et le modèle Person
.Comment envoyer correctement un signal avec une valeur initiale en utilisant ReactiveCocoa?
struct Person {
let name: String
let age: Int
}
Dans PersonListViewModel
le signal est défini en tant que sortie où le courant est manipulé.
protocol PersonListViewModelOutputs {
var goToPersonDetail: Signal<Person, NoError> { get }
}
PersonDetailViewModel
:
protocol PersonDetailViewModelInputs {
func viewDidLoad()
func configureWith(personSignal: Signal<Person, NoError>, initialPerson: Person)
}
protocol PersonDetailViewModelOutputs {
var person: Signal<Person, NoError> { get }
}
protocol PersonDetailViewModelType {
var inputs: PersonDetailViewModelInputs { get }
var outputs: PersonDetailViewModelOutputs { get }
}
public final class PersonDetailViewModel: PersonDetailViewModelType, PersonDetailViewModelInputs, PersonDetailViewModelOutputs {
init(){
self.person = self.configureWithPersonPropery.signal.skipNil()
}
private let configureWithPersonProperty = MutableProperty<Person?>(nil)
func configureWith(personSignal: Signal<Person, NoError>, initialPerson: Person) {
configureWithPersonProperty.value = initialPerson
configureWithPersonProperty <~ personSignal.producer
}
}
Cependant, cette solution semble apporter paramètre inutile à l'intérieur func configureWith(...)
et je pense qu'il pourrait y avoir une meilleure façon de le résoudre.
Par exemple, est-il possible d'obtenir la dernière valeur émise de personSignal: Signal<Person, NoError>
à l'intérieur de func configureWith(...)
sans envoyer la structure de personne?
Super, exactement ce que je cherchais. Je vous remercie! –