使用RxSwift在CombineLatest中有8个以上的参数

时间:2019-07-17 08:26:52

标签: ios swift reactive-programming reactive

有什么方法可以在RxSwift中的CombineLatest中放置8个以上的可观察对象?

这是我当前的实现方式:

let registerUserParameters = Observable.combineLatest(
        firstname.asObservable(),
        lastname.asObservable(),
        email.asObservable(),
        mobile.asObservable(),
        addresses.asObservable(),
        cities.asObservable(),
        pword.asObservable(),
        confirm_pword.asObservable(),
        instagramid.asObservable(),
        facebookid.asObservable()) {
            ($0, $1, $2, $3, $4, $5, $6, $7, $8, $9)
    }

我发现CombineLatest根据其功能最多只能接受8个参数。

public static func combineLatest<O1, O2, O3, O4, O5, O6, O7, O8>(_ source1: O1, _ source2: O2, _ source3: O3, _ source4: O4, _ source5: O5, _ source6: O6, _ source7: O7, _ source8: O8, resultSelector: @escaping (O1.E, O2.E, O3.E, O4.E, O5.E, O6.E, O7.E, O8.E) throws -> Self.E) -> RxSwift.Observable<Self.E> where O1 : ObservableType, O2 : ObservableType, O3 : ObservableType, O4 : ObservableType, O5 : ObservableType, O6 : ObservableType, O7 : ObservableType, O8 : ObservableType)

1 个答案:

答案 0 :(得分:2)

您可以仅合并前8个,获取合并的可观察值,然后合并后2个,获取合并的可观察值,然后合并两个可观察值。

let first8 = Observable.combineLatest(
        firstname.asObservable(),
        lastname.asObservable(),
        email.asObservable(),
        mobile.asObservable(),
        addresses.asObservable(),
        cities.asObservable(),
        pword.asObservable(),
        confirm_pword.asObservable()) {
            ($0, $1, $2, $3, $4, $5, $6, $7)
    }

let last2 = Observable.combineLatest(
    instagramid.asObservable(),
    facebookid.asObservable()) {
        ($0, $1)
    }

let registerUserParameters = Observable.combineLatest(first8, last2) {
    ($0.0, $0.1, $0.2, $0.3, $0.4, $0.5, $0.6, $0.7, $1.0, $1.1)
}