Я не уверен, почему вы даже хотите использовать BahaviorRelays здесь.Для поведения, которое вы описываете, я бы ожидал увидеть что-то вроде этого:
struct SetupProfileInputs {
let nameField: Observable<String>
let newValues: Observable<(name: String, username: String)>
}
struct SetupProfileVM {
let name: Observable<String>
let username: Observable<String>
init(_ inputs: SetupProfileInputs) {
name = Observable.merge(inputs.nameField, inputs.newValues.map { $0.name })
username = Observable.merge(inputs.nameField, inputs.newValues.map { $0.username })
}
}
Или, возможно, это (в зависимости от того, какой стиль модели вы используете.)
struct SetupProfileVM {
struct Inputs {
let nameField: Observable<String>
let newValues: Observable<(name: String, username: String)>
}
struct Outputs {
let name: Observable<String>
let username: Observable<String>
}
func transform(_ inputs: Inputs) -> Outputs {
let name = Observable.merge(inputs.nameField, inputs.newValues.map { $0.name })
let username = Observable.merge(inputs.nameField, inputs.newValues.map { $0.username })
return Outputs(name: name, username: username)
}
}
В любом случае вы присоединяете текстовое поле к вводу nameField
.Что бы ни вызывало метод SetupProfileVM.setNewValues(name:username:)
, его необходимо преобразовать в Observable и подключить к входу newValues
.
После того, как вы это сделаете, каждый раз, когда текстовое поле обновляется, SetupProfileVM.name
и SetupProfileVM.username
будет испускать то же значение.Каждый раз, когда newValues Observable отправляет значение, имя и имя пользователя будут выдавать разные значения.