ios中block(Objective C)和closure(Swift)之间的区别

在教程中,它的function都相同,即使闭包更容易,然后阻止和它避免了块和内存pipe理的复杂性,我已经经历了许多教程,但除了这些我没有得到区别之间的swift的“封闭” Objective-C“块”。

任何人都可以深入解释这种差异。 任何帮助,将不胜感激。

摘自:苹果公司“在cocoa和Objective-C中使用Swift”iBooks:

“Swift的闭包和Objective-C块是兼容的,所以你可以将Swift闭包传递给期望块的Objective-C方法。 Swift的闭包和函数具有相同的types,所以你甚至可以传递一个Swift函数的名字。

闭包具有与块类似的捕获语义,但在一个关键方面有所不同:variables是可变的而不是复制的。 换句话说,Objective-C中__block的行为是Swiftvariables的默认行为。“

稍有不同。 其中一个被提到; variables被捕获为variables,而不是值。 这可能是有用的或陷阱。 重要的是,你可以在Swift闭包中定义一个捕获列表,所以如果在捕获列表中包含self.property,那么该属性的值将被捕获,而不是self。 这也简化了捕捉弱variables。

显示差异的实际代码示例:

这确实编译:

let x : @convention(swift) (inout Int) -> () 

这不:

 let y : @convention(block) (inout Int) -> () 

错误(inout Int) -> () is not representable in Objective-C