我有一个需要分配给属性的完成处理程序,但我希望它异步执行。

如果我没有那个要求,我会写:

request.completionBlock = completionBlock

不过既然有这个需求,就得写这个
request.completionBlock = { response, error in
  DispatchQueue.main.async {
    completionBlock(response, error)
  }
}

这似乎是多余的和不 swift 。

没有更简单的语法吗?我想写一些类似的东西
request.completionBlock = completionBlock.map(DispatchQueue.main.async)

我能用这么简单的方式表达我的需求吗?

最佳答案

没有用于表达的内置语法,但您始终可以定义通用函数或运算符来启用这些方面的功能。

例如:

infix operator >

func ><T>(left:@escaping (T)->(), right:DispatchQueue) -> (T)->() {
  return { input in
    right.async { left(input) }
  }
}

定义了上述自定义运算符后,您的代码可以是:
request.completionBlock = completionBlock > DispatchQueue.main

我认为这是您正在寻找的一般感觉。

关于swift - 在调度异步中包装完成处理程序的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40489125/

10-11 10:37