Ios 如何快速执行递归块操作

Ios 如何快速执行递归块操作,ios,swift,block,nsoperationqueue,swift-block,Ios,Swift,Block,Nsoperationqueue,Swift Block,我正在使用alamofire,当用户打开应用程序时,我会发出一个请求(getPrescriptions),该应用程序是一个带有completionHandler的块。该函数从ws检索列表并可以分页,但我不知道端点上有多少项。。所以我做了一些类似的事情: //todo: temp? pagination if prescriptions.count == 10 { getPrescriptions(page: page!+1, completionHand

我正在使用alamofire,当用户打开应用程序时,我会发出一个请求(
getPrescriptions
),该应用程序是一个带有completionHandler的块。该函数从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(completion)和
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

    })


}

你的代码有点凌乱,没有冒犯之意——很难判断哪些变量被哪些闭包捕获——而且随着时间的推移,它会变得越来越难。如果可以,您应该在响应中添加一个字段,指示处方总数或是否有另一页要检索。@Losiowaty,这很好(真的很混乱)。问题是我不能更改ws,所以如果有10个,我会计算项目,我只需再次请求(他自己)检查第2页。。但我认为在第三页(它还没有发生),我的第一个电话将不会收到完成。。无论如何,这是一个混乱和丑陋的。我必须让它变得更好,否则我今晚怎么睡得着?谢谢你的反馈!