【问题标题】:RxSwift: Observe rx_text & rx_offset simultaneouslyRxSwift:同时观察 rx_text 和 rx_offset
【发布时间】:2016-05-06 20:15:03
【问题描述】:

我一直在开发一个搜索控制器,当用户在搜索字段中输入时,它使用 RxSwift 更新 DataSource,如下所述:http://www.thedroidsonroids.com/blog/ios/rxswift-examples-3-networking/

这是我的视图模型:

struct SearchControllerViewModel {

    let provider: RxMoyaProvider<ThreadifyEndpoint>
    let startsWith: Observable<String>

    func startSearching() -> Observable<[SearchedNodeViewModel]> {
        return startsWith
            .observeOn(MainScheduler.instance)
            .flatMapLatest { query -> Observable<[SearchedNodeViewModel]?> in
                return self.findNodes(query)
        }.replaceNilWith([])


    }

    internal func findNodes(startsWith: String) -> Observable<[SearchedNodeViewModel]?> {
        return self.provider
            .request(ThreadifyEndpoint.SearchForNodes(startsWith: startsWith))
            .mapArrayOptional(SearchedNodeViewModel.self)
    }
}

现在我希望不仅在用户输入时加载新数据,而且在 sh 向下滚动时加载。 我正在考虑使用 combineLatest 来观察 rx_text 和 rx_offset 但由于编译错误,我无法将 Observable 传递给 combineLatest。

【问题讨论】:

  • 什么是编译错误? combineLatest 需要多个 Observable,所以这很奇怪。
  • @solidcell 无法使用类型为 (Observable, Observable) 的参数列表调用“combineLatest”
  • 我已经在下面回答了。此外,如果您使用 swift 标签标记您的 Swift 问题,您的问题(和答案)将获得语法高亮显示。

标签: swift rx-swift


【解决方案1】:

您看到的编译错误是由于您没有使用实际方法。您打算使用的方法签名是:

public class func combineLatest<O1 : ObservableType, O2 : ObservableType>(source1: O1, _ source2: O2, resultSelector: (O1.E, O2.E) throws -> Element) -> RxSwift.Observable<Element>

请注意,您忘记了第三个参数:resultSelector。这应该是一个描述您希望如何将最新元素组合成新元素的块。

根据您的错误消息,我认为您是这样使用它的:

let combined = Observable.combineLatest(stringObservable, pointObservable)

然而,你应该像这样使用它:

let combined = Observable.combineLatest(stringObservable, pointObservable) { (s, p) in
    return "\(s), \(p)" // or construct your new element however you'd like
}

没有块,RxSwift 不知道你想如何组合它们。您可能一直认为它只是默认创建一个新的 (String, CGPoint) 元组作为元素,但它没有做出这样的假设并且需要您告诉它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多