对这种 iOS 响应长 运行 异步网络调用的方法有任何顾虑吗?

Any concerns about this iOS approach to responding to a long-running, async web call?

我写了一个 PHP 函数(故意)休眠 6 秒来模拟我的服务器需要很长时间才能响应我的 Swift 应用程序。我想在 Swift 中优雅地处理这个问题,这就是我想出的。对此有任何想法或担忧吗?可以改进吗?

Th 函数与我编写的名为 ContentWebService 的服务连接 - 这会与服务器异步 post,然后做出相应的响应。当您单击该按钮时,我将其禁用并使其显示为 'loading'(这是一个概念证明,稍后我将使用本地化字符串)但基本上我想阻止用户再次单击它(不禁用它,我能够发出十几个我认为不太好的请求)。

当脚本休眠/响应返回时,您可以浏览应用程序的其余部分并执行您的操作,但无论您身在何处,消息最终都会返回并说明它已成功。

看起来不错??

@IBAction func btnSlow(sender: UIButton) {

    sender.enabled = false //sender is the button - set disabled as it gets clicked
    sender.setTitle("Loading, please wait..", forState: UIControlState.Normal)

    ContentWebService.SlowFunction()
        { (r) -> () in

            if (r.Status == ResponseCode.SUCCESS) {
                dispatch_async(dispatch_get_main_queue()) {
                    self.presentViewController(AlertCreator.ShowSimplePopup("Done", message: "Completed successfully.."), animated: true, completion: nil)
                    sender.enabled = true //reset back to enabled
                    sender.setTitle("Click for Slow Function", forState: UIControlState.Normal) //restore original text
                }
            }
            else {
                dispatch_async(dispatch_get_main_queue()) {
                    self.presentViewController(AlertCreator.ShowSimplePopup(StringHelper.GetLocalizedString("UnknownError"), message: StringHelper.GetLocalizedString("UnknownErrorMessage")), animated: true, completion: nil)
                    sender.enabled = true //reset back to enabled
                    sender.setTitle("Click for Slow Function", forState: UIControlState.Normal) //restore original text
                }
            }
    }

是的,您在该代码中所做的是标准的异步回调过程。我唯一的建议是,如果您还没有超时保证,您应该考虑一下。

(请注意,如果需要,阻止用户导航到任何地方可能是合理的。您可以在调用 ContentWebService.SlowFunction 之前关闭界面对点击的响应,并在您“在匿名完成函数中重新回调。)