如何使用RxSwift将两个observable合并到另一个observable?

时间:2017-03-14 09:55:20

标签: ios swift rx-swift

如何使用RxSwift将两个observable合并到另一个observable? 就我而言:

<select id="Test1">
        <option value="test">Role1</option>
        <option value="test">Role2</option>
        <option value="test">Role3</option>
        <option value="test">Role4</option>
    </select>

    @Html.DisplayFor(Test1)

但是xcode构建失败的原因是:

无法转换类型的值'(AssetMediaType,) - &gt;可观察到的百分比抑制率数据MediaAsset] GT;”期望参数类型'(,_) - &gt; _'

2 个答案:

答案 0 :(得分:0)

如果你想让他们同时开火你需要使用Zip

let zipped = Observalbe.zip(a, b){$0}

或在您的代码中

struct ViewModel {

let items: Observable<[MediaAsset]>

init(type: Observable<AssetMediaType>, provider: DataProvider) {
    items = Observable.zip(type, provider.rx.didAuthorize){$0}

}

答案 1 :(得分:0)

根问题:

您的类型不匹配。

假设这些函数属于DataProvider.rx,而不是ViewModel,此代码:

Observable.combineLatest(type, provider.rx.didAuthorize, resultSelector: { (type, status)  in
    return provider.rx.fetchMedia(type)
})

返回一个Observable&lt;可观察到的百分比抑制率数据ViewModel.MediaAsset] GT;&GT;

但您将项目声明为Observable&lt; [MediaAsset]&gt;

解决方案:展开可观察的

items = Observable.combineLatest(type, provider.didAuthorize) { type,status in
        return (type,status)
    }
    .flatMapLatest { type,status in
        return provider.fetchMedia(type)

    }

注意:目前还不清楚你是如何使用状态的。我将它传递给flatMapLatest,但不会再传递它。