2016-09-28 26 views
1

下面一行是给我的编译器错误“泛型参数‘的KeyType’不能推断”:NSMapTable“通用参数‘的KeyType’不能推断”

fileprivate var delegatesMap = NSMapTable.strongToWeakObjects() 

我想是更明确的说:

fileprivate var delegatesMap:MapTable<Key,Value> = NSMapTable.strongToWeakObjects() 

但我那么的Xcode不承认“重点”

如何去修复呢?

编辑:我想我的关键是String类型的,和我的价值是类型MenuActionDelegate(类协议)的

+0

不只是斯威夫特,而且我没有看到你的KeyType要使用什么。你想用什么类型作为你的NSMapTable的KeyType和ValueType? – OOPer

+0

我想用字符串键和协议“MenuActionDelegate”作为值 –

+0

你最好包括某种信息到你的问题。我会写一个简短的答案。 – OOPer

回答

0

您可能需要编写这样的事:

fileprivate var delegatesMap = NSMapTable<NSString, MenuActionDelegate>.strongToWeakObjects() 

的泛型参数KeyTypeValueType必须AnyObject,所以你不能直接把String那里,你也需要一些明确的铸造as NSString

,值类型MenuActionDelegate需要一个@objc - 方案。 否则您可能需要编写这样的事:

var delegatesMap = NSMapTable<NSString, AnyObject>.strongToWeakObjects() 

而且使用它作为:

let theDelegate = delegatesMap.object(forKey: "delegateName" as NSString) as! MenuActionDelegate 
+0

这是一类的协议,但我发现了一个错误,指出“MenuActionDelegate作为具体类型面对议定书‘AnyObject’不支持” –

+0

@FaisalSyed,对不起,我已经错过了检查类协议。你可以改变它'@ objc'协议吗? – OOPer

+0

我不能那样做。我究竟如何添加一些显式转换为NSString?我尝试了几种方法,但一直没有做到这一点 –