Skip to content

Instantly share code, notes, and snippets.

@VivienCormier
Last active November 9, 2016 12:23
Show Gist options
  • Save VivienCormier/06b8e82bb0527bc3f82db8f28c838728 to your computer and use it in GitHub Desktop.
Save VivienCormier/06b8e82bb0527bc3f82db8f28c838728 to your computer and use it in GitHub Desktop.
WeakSet
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