- 在Swift 3.0中原有的Dispatch once已經被廢棄了.
- 我們可以通過給DispatchQueue實現一個擴展方法來實現原有的功能:
extension DispatchQueue {
private static var _onceToken = [String]()
class func once(token: String = "\(#file):\(#function):\(#line)", block: ()->Void) {
objc_sync_enter(self)
defer
{
objc_sync_exit(self)
}
if _onceToken.contains(token)
{
return
}
_onceToken.append(token)
block()
}
}
// 使用
DispatchQueue.once {
// your code
}
DispatchQueue.once(token: "identify") {
// your code
}
參考: Swift 3.0之后實現Dispatch once擴展
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。