1
我试图从一个ViewModel发送一个信号到另一个。基本上我希望第二个ViewModel使用与第一个ViewModel相同的Signal,但是我还需要在第二个ViewModel中处于init状态的初始值。到目前为止,我已经设法通过发送Signal<Person, NoError>
和Person
模型来解决这个问题。如何使用ReactiveCocoa正确发送带有初始值的信号?
struct Person {
let name: String
let age: Int
}
在PersonListViewModel
信号被定义为处理流的输出。
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
}
}
但是这种解决方案似乎带来不必要的参数内func configureWith(...)
,我想有可能是解决这个问题的较好方法。
例如,是否有可能从personSignal: Signal<Person, NoError>
里面得到func configureWith(...)
的最后发射值而不发送Person Struct?
太好了,正是我在找的东西。谢谢! –