Я изучаю Rx, и я хотел бы, чтобы я мог декларативно определять входные данные и вывода какого-либо элемента пользовательского интерфейса в терминах друг друга, прежде чем компонент этого элемента будет инициализирован.Есть ли способ декларативно нажимать обновления на наблюдаемые после того, как они были определены?
Это то, что это будет выглядеть так:
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
var child: ButtonComponent!
override func viewDidLoad() {
super.viewDidLoad()
let buttonInput = PublishSubject<()>()
let buttonOutput = buttonInput
.scan(0) { count, _ in
count + 1
}
.map { $0.description }
self.child = ButtonComponent(
button: self.button,
input: buttonInput,
output: buttonOutput
)
}
}
class ButtonComponent {
weak var button: UIButton!
let disposeBag = DisposeBag()
init(button: UIButton, input: PublishSubject<()>, output: Observable<String>) {
self.button = button
output
.subscribeNext { string in
button.setTitle(string, forState: .Normal)
}
.addDisposableTo(disposeBag)
button.rx_tap
.subscribeNext {
input.onNext($0)
}
.addDisposableTo(disposeBag)
}
}
Проблема здесь состоит в том, что я использую PublishSubject толкать обновления входного потока, который является обязательным и не рекомендуемые. Предоставляет ли Rx способ как-то добавить последовательности к уже запущенному наблюдаемому?
Ответ на ваш последний вопрос, да, с помощью 'Observable.Merge'. Хотя я не совсем уверен, как его применять здесь ... – supertopi