Swift Siesta Framework:在发送请求之前做一些事情

时间:2017-12-21 17:18:30

标签: ios swift request siesta

我正在尝试Siesta框架,我想在发送每个API调用之前调用一个函数。

我看到decorateRequests(with:)最适合我要做的事情,但由于返回值必须是Request,因此以下代码出现错误:

service.decorateRequests(with: { (res, req) -> Request in
  if (res.url == self.tests.url) {
    // do things..., then call req.repeated()
  } else {
    req.repeated()
  }
})

但是,我有这个错误: Missing return in a closure expected to return 'Request'

知道如何让它发挥作用吗?感谢

1 个答案:

答案 0 :(得分:0)

这里基本的Swift语法错误是,如果返回值的闭包包含多个语句,则需要使用return关键字。

如果您需要做的事情是:

  1. 可以同步阻止主线程因为它是简短的(例如记录请求,翻转测试期望),或
  2. 需要在发送请求时启动,但请求可以继续并立即启动而无需等待它完成
  3. ......那就不必复杂了。在每个人等待时执行您的简短任务,然后返回请求:

    service.decorateRequests { req, res in
      if res.url == self.tests.url {
        doThatOtherThing()  // blocks the main thread, which is fine if it’s brief
      }
      return req
    }
    

    另一方面,如果你需要做一些在主线程继续时会花费无限时间的事情,然后然后启动该请求,那么Siesta {{3} }。您可以通过编写Request协议的自定义实现来实现,但这很费力且容易出错。 Siesta的未来版本将采用更好的方法。