如何进行递归块操作Swift

时间:2017-05-02 22:00:02

标签: ios swift block nsoperationqueue swift-block

我正在使用alamofire并在用户打开带有completionHandler的块的应用程序时发出请求(getPrescriptions)。该函数从ws检索列表并可以进行分页,但我不知道我在端点上有多少项。所以我做了类似的事情:

 //todo: temp? pagination
        if prescriptions.count == 10 {
            getPrescriptions(page: page!+1, completionHandler: { (_) in
                    print("get prescription page", page!+1)
                completionHandler(prescriptions)
            })
        } else {
            completionHandler(prescriptions)
        }

我已经做了那个暂时的,但我无法弄清楚我怎么能做得更好。流程是这样的:session.getPrescriptions(完成)和getPrescriptions可以在需要时调用自己。

这是完整的代码:

 static func getPrescriptions(page: Int? = 1, completionHandler: @escaping (_ prescriptions: [Prescription]?) -> Void){

    let endPoint = "/prescriptions?page=\(page!)&size=10"

    doDefaultRequestWith(endPoint: endPoint, requestType: .get, completionWithError: { (error) in
        return completionHandler(nil)

    }, completionWithResponse: { (response) in

        guard let prescriptionsArray = response.result.value as? NSArray else {
            return
        }
        var prescriptions: [Prescription] = []
        for prescriptionJSON in prescriptionsArray {
            if let json = prescriptionJSON as? [String: AnyObject] {
                if let prescription = Prescription(JSON: json) {
                    if let address = prescription.address {
                        session.setAddress(address)
                    }
                    prescriptions.append(prescription)
                }
            }
        }

        if prescriptions.count > 0 {
            session.setPrescriptions(prescriptions: prescriptions)
        } else {
            completionHandler(nil)
        }

        //todo: temp? pagination
        if prescriptions.count == 10 {
            getPrescriptions(page: page!+1, completionHandler: { (_) in
                    print("get prescription page", page!+1)
                completionHandler(prescriptions)
            })
        } else {
            completionHandler(prescriptions)
        }

    }, completionWithJSON: { (_) in

    })


}

0 个答案:

没有答案