d8436f79f6
* files reorganization (#432) * fix podspec * only include swift files * Fix broken readme paths (#433) * update links * fix french link * split skeleton debug to public and internal methods (#434) * Add build phase to execute SwiftLint (#435) * update tvOS tests * Refactor Extensions folder (#436) * Reorganize SkeletonAppearance (#437) * reorganize helpers and builders folders (#438) * Refactor flow and multilines (#439) * Reorganize collections folder (#440) * reorganize collections folder * update podspec * Refactor SkeletonView facade (#441) * reorganize collections folder * update podspec * refactor skeletonview facade * fix conflict * update iOS example * fix github workflows * update tvOS example project build settings
38 lines
972 B
Swift
38 lines
972 B
Swift
//
|
|
// Copyright SkeletonView. All Rights Reserved.
|
|
//
|
|
// Licensed under the MIT License (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://opensource.org/licenses/MIT
|
|
//
|
|
// DispatchQueue+Extensions.swift
|
|
//
|
|
// Created by Juanpe Catalán on 19/8/21.
|
|
|
|
import Foundation
|
|
|
|
extension DispatchQueue {
|
|
|
|
private static var _onceTracker = [String]()
|
|
|
|
class func once(token: String, block: () -> Void) {
|
|
objc_sync_enter(self)
|
|
defer { objc_sync_exit(self) }
|
|
guard !_onceTracker.contains(token) else { return }
|
|
|
|
_onceTracker.append(token)
|
|
block()
|
|
}
|
|
|
|
class func removeOnce(token: String, block: () -> Void) {
|
|
objc_sync_enter(self)
|
|
defer { objc_sync_exit(self) }
|
|
guard let index = _onceTracker.firstIndex(of: token) else { return }
|
|
_onceTracker.remove(at: index)
|
|
block()
|
|
}
|
|
|
|
}
|