Last active
November 9, 2016 12:23
-
-
Save VivienCormier/06b8e82bb0527bc3f82db8f28c838728 to your computer and use it in GitHub Desktop.
WeakSet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
class WeakSet<T> { | |
var count: Int { | |
return weakStorage.count | |
} | |
private let weakStorage = NSHashTable<AnyObject>.weakObjects() | |
func add(_ object: T) { | |
weakStorage.add(object as AnyObject) | |
} | |
func remove(_ object: T) { | |
weakStorage.remove(object as AnyObject) | |
} | |
func removeAllObjects() { | |
weakStorage.removeAllObjects() | |
} | |
var allObjects: [T] { | |
let enumerator = weakStorage.objectEnumerator() | |
let iterator = AnyIterator { | |
return enumerator.nextObject() as! T? | |
} | |
return Array(iterator) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment