栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

苹果新的编程语言Swift如何处理块和异步请求?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

苹果新的编程语言Swift如何处理块和异步请求?

(Objective-)C块的Swift等效项称为闭包。《The Swift Programming
Language》一书中有一整章关于它们的内容。

根据使用闭包的上下文,可以使用非常简洁的语法声明/使用它。例如,可以采用如下方法

(success: Bool, error: NSError) - >Void
调用采用签名的完成处理程序的方法:

someMethod(otherParameters: otherValues, completionHandler:{ success, error in    if !success { NSLog("I am a leaf on the wind: %@", error) }})

在闭包本质上提供流控制的情况下,还有一种尾随的闭包语法可以很好地理解。而且,您可以在想要简短的时候删除参数名称(以牺牲可读性为代价,但是在某些明显的情况下(如下面所示)是可以的)。通常,

return
语句也是隐式的。

myArray.sort { $0 < $1 }let squares = myArray.map { value in    value * 2}

Swift本身没有异步请求的任何内容,因此您可以使用现有的API。不过,您可以使用结尾的闭包语法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {    // do some async stuff    NSOperationQueue.mainQueue().addOperationWithBlock {        // do some main thread stuff stuff    }}

在大多数情况下,您无需担心像使用ObjC块那样使用Swift闭包创建参考循环。简而言之,捕获语义足够类似于大多数事物所需的“工作方式”,但又有足够的区别,以至于块/闭包使用的通用模式(例如,分派到后台/主线程并引用

self
的)。属性)不会引起循环。

循环仍然是可能的,但是有一个解决方案。这个答案已经有点长了,因此请查看文档中的“
强大的闭包参考周期”以获取完整的解释。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448338.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号