RxSwiftを使用しています。どのUIが表示されるかに依存するテキストフィールドの配列があります。配列内に 1、3、または 4 つのテキストフィールドを持つことができます。
配列を反復処理して、フィールドが有効かどうかを示すブール値にマップするシグナルをそれぞれに作成します。
let textFields: [UITextField] = ...
var signals: [Observable<Bool>] = []
textFields.forEach { tf in
let sig = tf.rx_text
.map { string in
return string.length > 0
}
signals.append(sig)
}
通常、複数のシグナルを組み合わせるには、combineLatest
which has multiple versions を使用して、異なる数の引数を受け取ります。3 つのシグナルがある場合、通常は次のようになります。
_ = combineLatest(sig1, sig2, sig3) { $0 }
.subscribeNext { [weak self] valid in
self!.someButton.enabled = valid
}
.addDisposableTo(disposeBag)
結合される信号の数が不明な場合に、信号を結合する方法はありますか?
または、可変数のジェネリック引数を持つ関数を作成する方法はありますか? これが、いくつのシグナルかを知らずに複数のシグナルを結合する関数を作成するための出発点になると考えています。