我有一个需要分配给属性的完成处理程序,但我希望它异步执行。
如果我没有那个要求,我会写:
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/