0

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

我看到这decorateRequests(with:)最适合我想要做的事情,但是由于返回值必须是 a 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'

知道如何使它工作吗?谢谢

4

1 回答 1

0

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


如果您需要做的事情是:

  1. 可以同步阻塞主线程,因为它很简短(例如记录请求,翻转测试期望),或者
  2. 发送请求时需要启动,但请求可以继续并立即启动,而无需等待它完成

......那么它不必复杂。在每个人都等待的时候做你的简短任务,然后返回请求:

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目前不能很好地支持该请求。您可以通过编写Request协议的自定义实现来做到这一点,但这既费力又容易出错。更好的方法将出现在 Siesta 的未来版本中。

于 2017-12-22T02:21:09.170 回答