块是不是也像完成处理程序那样使用回调功能? (斯威夫特/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 handlercallback 都是(转义)closure 的同义词——它是 block.@escaping 表示在封闭函数返回后稍后调用闭包。

typealias 只是一个方便的标识符,用于将更复杂的右侧替换为更简单的左侧。它与闭包没有直接关系。

【讨论】:

以上是关于块是不是也像完成处理程序那样使用回调功能? (斯威夫特/IOS)的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特,如何让完成处理程序按我的意愿工作?

斯威夫特:@objc(...) 属性

在 Swift 中是不是有一种简洁的方法可以将完成块附加到 NSURLSessionDataDelegate 回调?

在 Flutter 中完成“构建”功能时是不是有任何回调告诉我?

完成处理程序是不是结束功能?

实训24 功能块的生成与调用 注意功能块的背景数据块 变量表最左侧的地址是系统自动生成的。前面讲 功能块与功能的区别是 功能块不能一个扫描周期完成,本功能块例子 确实不是一个扫描周期能完成,例如判