块是不是也像完成处理程序那样使用回调功能? (斯威夫特/IOS)
Posted
技术标签:
【中文标题】块是不是也像完成处理程序那样使用回调功能? (斯威夫特/IOS)【英文标题】:Does blocks also use call back functiality as the complition handler does? (Swift/IOS)块是否也像完成处理程序那样使用回调功能? (斯威夫特/IOS) 【发布时间】:2018-08-25 08:37:38 【问题描述】:有questions与这个类似,我了解到,使用回调函数的完成处理程序,块只是匿名函数或闭包
block 和 completion handler 的示例
class func scheduledTimer(withTimeInterval interval: TimeInterval,
repeats: Bool,
block: @escaping (Timer) -> Void) -> Timer
func startUpdates(from start: Date,
withHandler handler: @escaping CMPedometerHandler)
问题1
我注意到另一个区别是完成处理程序具有类型的类型别名,这适用于所有 ios 框架设计吗?
typealias CMPedometerHandler = (CMPedometerData?, Error?) -> Void
问题2
块也使用回调函数吗?块也有转义关键字,这意味着闭包将在外部函数返回后被调用,这对我来说听起来很“回调”。
问题3
如果问题 2 的答案是肯定的,那么重新发明***的原因是什么,为什么不把它们都称为块或完成处理程序
【问题讨论】:
【参考方案1】:您在谈论实际上具有相同含义的术语。因此,您的 3 个问题不能单独回答。
completion handler 和 callback 都是(转义)closure 的同义词——它是 block.@escaping
表示在封闭函数返回后稍后调用闭包。
typealias
只是一个方便的标识符,用于将更复杂的右侧替换为更简单的左侧。它与闭包没有直接关系。
【讨论】:
以上是关于块是不是也像完成处理程序那样使用回调功能? (斯威夫特/IOS)的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中是不是有一种简洁的方法可以将完成块附加到 NSURLSessionDataDelegate 回调?
在 Flutter 中完成“构建”功能时是不是有任何回调告诉我?
实训24 功能块的生成与调用 注意功能块的背景数据块 变量表最左侧的地址是系统自动生成的。前面讲 功能块与功能的区别是 功能块不能一个扫描周期完成,本功能块例子 确实不是一个扫描周期能完成,例如判