Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pagination 使用RxSwift通过Alamofire请求检索下一页数据_Pagination_Alamofire_Rx Swift - Fatal编程技术网

Pagination 使用RxSwift通过Alamofire请求检索下一页数据

Pagination 使用RxSwift通过Alamofire请求检索下一页数据,pagination,alamofire,rx-swift,Pagination,Alamofire,Rx Swift,我有一些从服务器获取消息的现有代码。服务器在Django中,返回分页数据。因此,到服务器的第一个调用将获取10个最新结果,下一个调用将带来更多结果,以此类推 但是,问题是只有第一个请求被发送到服务器。因此,它只加载10个最新结果,而不加载其他结果。我想修改代码,使应用程序能够获取所有结果 JSON响应 fileprivate lazy var _getMessagesAction: Action<EnumerableType, EnumerableType> = Action { (

我有一些从服务器获取消息的现有代码。服务器在Django中,返回分页数据。因此,到服务器的第一个调用将获取10个最新结果,下一个调用将带来更多结果,以此类推

但是,问题是只有第一个请求被发送到服务器。因此,它只加载10个最新结果,而不加载其他结果。我想修改代码,使应用程序能够获取所有结果

JSON响应

fileprivate lazy var _getMessagesAction: Action<EnumerableType, EnumerableType> = Action { (last: EnumerableType?) -> Observable<EnumerableType> in

        self.isNewRequest = last?.next == nil ? true : false

        return self.messagesRequest(last)
}
请求:

请求:

代码

fileprivate lazy var _getMessagesAction: Action<EnumerableType, EnumerableType> = Action { (last: EnumerableType?) -> Observable<EnumerableType> in

        self.isNewRequest = last?.next == nil ? true : false

        return self.messagesRequest(last)
}

嗯。。。我觉得你的帖子不足以为你的情况创建一个具体的例子,但是有这样做的示例代码

在RxSwift GitHub repo中,有几个示例,包括在页面中加载数据的GitHubSearchRepositories


我还写了这个要点:其中包括测试和详细说明视图控制器的视图模型,以及用于显示活动指示器的可观察对象。

我更新了Swift 4.2的要点,并对其进行了改进。很好的要点可以在任何地方插入,但是,我尝试了它,我有两个顾虑:(1)我猜在Observable.CombineTest(Observable.just(page),loadData(page==-1?1:page))行中检查页与-1是多余的,因为此时页永远不会是-1?(2) 一旦我订阅了PaginationSink.elements observable,它甚至在侦听“刷新”触发器之前就发出空数组[]作为“下一个”事件,为什么会发生这种情况?(1)这不是多余的,因为此时页面可以是-1(如果用户想要刷新)。(2)如测试线束中所示,创建后,代码将立即尝试加载第一页。为什么您的第一页是一个空数组,这是您需要弄清楚的。查看代码附带的测试工具,了解它是如何工作的。我已经将我对这一要点的关注转移到了它页面的评论部分。
fileprivate lazy var _getMessagesAction: Action<EnumerableType, EnumerableType> = Action { (last: EnumerableType?) -> Observable<EnumerableType> in

        self.isNewRequest = last?.next == nil ? true : false

        return self.messagesRequest(last)
}
public struct Enumerable<EnumerableType: ResponseCollectionModelSerializable> : ResponseModelSerializable {

    let count: Int
    let prev: String?
    let next: String?
    let results: [EnumerableType]?

    public init?(response: HTTPURLResponse, json: JSON) {
        guard let countOBj = json["count"] else {
            return nil
        }

        self.count = countOBj as! Int
        self.prev = json["previous"] as? String
        self.next = json["next"] as? String

        if let results = json["results"] as? AnyObject {
            self.results = EnumerableType.collection(response: response, json: JSON(results))
        } else {
            self.results = nil
        }

    }

}