我试图更准确地理解Swift的"关闭".
但@escaping和Completion Handler太难以理解
我搜索了许多Swift帖子和官方文档,但我觉得还不够.
这是官方文档的代码示例
var completionHandlers: [()->Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping ()->Void){
completionHandlers.append(completionHandler)
}
func someFunctionWithNoneescapingClosure(closure: ()->Void){
closure()
}
class SomeClass{
var x:Int = 10
func doSomething(){
someFunctionWithEscapingClosure {
self.x = 100
//not excute yet
}
someFunctionWithNoneescapingClosure {
x = 200
}
}
}
let instance = SomeClass()
instance.doSomething()
print(instance.x)
completionHandlers.first?()
print(instance.x)
Run Code Online (Sandbox Code Playgroud)
我听说有两种使用方法和原因 @escaping
第一个用于存储闭包,第二个用于Async操作目的.
以下是我的问题:
首先,如果doSomething执行someFunctionWithEscapingClosure则将使用closure参数执行,并且该闭包将保存在全局变量数组中.
我认为封闭是{self.x = 100}
如何self在{self.x = 100}中保存在全局变量中completionHandlers可以连接到instance该对象 …