Swift 可选转义闭包

2024-03-12

编译错误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(使用前将#替换为@)

Swift 可选转义闭包 的相关文章

随机推荐