123456789101112131415161718192021222324 |
- import Foundation
- /*
- Credits:
- https://github.com/future-challenger/Swift3.0/tree/master/GCD
- */
- public extension DispatchQueue {
- private static var onceTracker = [String]()
- /// Execute the given `block` only once during app's lifecycle
- typealias Block = () -> Void
- public class func once(token: String, block: @escaping Block) {
- objc_sync_enter(self);
- defer {
- objc_sync_exit(self)
- }
- if onceTracker.contains(token) { return }
- onceTracker.append(token)
- block()
- }
- }
|