(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 {dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { // do some async stuff NSOperationQueue.mainQueue().addOperationWithBlock { // do some main thread stuff stuff }}< }let squares = myArray.map { value in value * 2}
Swift本身没有异步请求的任何内容,因此您可以使用现有的API。不过,您可以使用结尾的闭包语法:
self
在大多数情况下,您无需担心像使用ObjC块那样使用Swift闭包创建参考循环。简而言之,捕获语义足够类似于大多数事物所需的“工作方式”,但又有足够的区别,以至于块/闭包使用的通用模式(例如,分派到后台/主线程并引用
强大的闭包参考周期”以获取完整的解释。的)。属性)不会引起循环。
循环仍然是可能的,但是有一个解决方案。这个答案已经有点长了,因此请查看文档中的“
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)