class ZStrongToWeakMapTable<K: AnyObject, V: AnyObject> { let mapTable: NSMapTable init() { self.mapTable = NSMapTable.strongToWeakObjectsMapTable() // <== Here !! } subscript(key: K) -> V? { get { return self.mapTable.objectForKey(key) as? V } set { self.mapTable.setObject(newValue, forKey: key) } } var description: String { return mapTable.description } } さて、これには、全部の4つのバリエーションがあります。なるべく、重複したコードを