编译错误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中会自动将其标记为转义。从技术上讲,它已经通过嵌入枚举(可选)来“转义”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)