Skip to content

Instantly share code, notes, and snippets.

@codelynx
Last active August 10, 2021 08:11
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codelynx/f304568a505da0e6f45e to your computer and use it in GitHub Desktop.
Save codelynx/f304568a505da0e6f45e to your computer and use it in GitHub Desktop.
Swifty NSMapTable that can deal with weak referenced objects - protocol extension edition
// ZMapTable.swift
//
// Copyright (c) 2016 Kaz Yoshikawa. Released under MIT License.
protocol ZMapTableProtocol: CustomStringConvertible {
associatedtype K: AnyObject
associatedtype V: AnyObject
var mapTable: NSMapTable { get }
subscript(key: K) -> V? { get set }
}
extension ZMapTableProtocol {
subscript(key: K) -> V? {
get { return self.mapTable.objectForKey(key) as? V }
set { self.mapTable.setObject(newValue, forKey: key) }
}
var description: String { return self.mapTable.description }
}
class ZStrongToWeakMapTable<T: AnyObject, U: AnyObject>: ZMapTableProtocol {
typealias K = T
typealias V = U
let mapTable: NSMapTable = NSMapTable.strongToWeakObjectsMapTable()
}
class ZWeakToStrongMapTable<T: AnyObject, U: AnyObject>: ZMapTableProtocol {
typealias K = T
typealias V = U
let mapTable: NSMapTable = NSMapTable.weakToStrongObjectsMapTable()
}
class ZWeakToWeakMapTable<T: AnyObject, U: AnyObject>: ZMapTableProtocol {
typealias K = T
typealias V = U
let mapTable: NSMapTable = NSMapTable.weakToWeakObjectsMapTable()
}
class ZStrongToStrongMapTable<T: AnyObject, U: AnyObject>: ZMapTableProtocol {
typealias K = T
typealias V = U
let mapTable: NSMapTable = NSMapTable.strongToStrongObjectsMapTable()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment