作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
编译器错误 Closure use of non-escaping parameter 'completion' may allow it to escape
,这是有道理的,因为它将在函数返回后调用。
func sync(completion:(()->())) {
self.remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) { (status, error) -> Void in
completion()
}
}
但是如果我将闭包设为可选则不会出现编译器错误,这是为什么呢?函数返回后仍然可以调用闭包。
func sync(completion:(()->())?) {
self.remoteConfig.fetch(withExpirationDuration: TimeInterval(expirationDuration)) { (status, error) -> Void in
completion?()
}
}
最佳答案
将闭包包装在 Optional 中会自动将其标记为转义。它在技术上已经通过嵌入枚举(Optional)来“转义”。
关于Swift 可选的转义闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47417920/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!