2015-09-18 85 views
3

如何将类作为字典键使用? 示例类作为快速翻译字典键

class Base:NSObject{} 
class A:Base{} 
class B:Base{} 

var map:[NSObject:AnyObject] = [:] 

map[A.self] = "lalala"; 

更新,找到了一些转换。它工作,但我无法解释。

let any: AnyObject = A.self as AnyObject; 
let key = any as! NSObject; 
print(key.hash); 
+1

索引一类是根本不可能的。显然有一个糟糕的设计决定会导致你尝试它。如果绝对需要(这是不可能的),你可以使用类名。 – Sulthan

+0

你想如何使用这本词典? 如果你想以不同的方式回应不同的类,那么可能为所有相关的类创建自己的协议和扩展更合适。 – Tali

+0

我需要字典(Class:objectOfClass)。在哪里我可以通过Class获得对象,通过Class删除对象并添加对象 – john07

回答

2

我觉得你的问题是A.self根本不会是一个NSObject。将字典定义更改为[AnyObject:AnyObject]将失败,因为AnyObject不可排除。您可以使用NSObject的可排序类方法之一,例如.description ...

class Base:NSObject{} 
class A:Base{} 
class B:Base{} 

var map:[NSObject:AnyObject] = [:] // A.self in Swift will not be an NSObject 
//var map:[AnyObject:AnyObject] = [:]// AnyObject does not conform to Hashable 

map[A.description()] = "lalala" 
let c = map[A.description()] // "lalala" 
//map[A.self] = "lalala" // Cannot subscript [NSObject : AnyObject] with index A.Type 
+0

虽然我不满意,但它的工作。 – john07

0

可能这就是你需要:

class Base:NSObject{} 
class A:Base{} 
class B:Base{} 

var tempDict:[NSObject:AnyObject] = [:] 

tempDict["\(A.self)"] = "lalala" 

tempDict["\(A.self)"] //"lalala"