相关疑难解决方法(0)

Swift @escaping和Completion Handler

我试图更准确地理解Swift的"关闭".

@escapingCompletion 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该对象 …

closures escaping swift

80
推荐指数
2
解决办法
5万
查看次数

标签 统计

closures ×1

escaping ×1

swift ×1