如何在Swift 3中使用带有String键的NSMapTable?

时间:2016-11-20 09:07:49

标签: ios swift macos swift3

在早期版本的Swift中,我的NSMapTable中的键可以是字符串:

let mapTable = NSMapTable(keyOptions: .StrongMemory, valueOptions: .WeakMemory)
...
mapTable.setObject(..., forKey: "foo")

Per:http://nshipster.com/nshashtable-and-nsmaptable/

在Swift 3中,NSMapTable需要通用参数。但是当我尝试做的时候:

NSMapTable<String, MyClass>(keyOptions: .strongMemory, valueOptions: .weakMemory)

我收到"Type 'String' does not conform to protocol 'AnyObject'"错误。

将我的NSMapTable的键在Swift 3中作为字符串的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

我不会说你自己的答案是&#34; hack&#34;,只是比需要的更通用,使用:

NSMapTable<NSString, MyClass>(keyOptions: .strongMemory, valueOptions: .weakMemory)
...
mapTable.setObject(..., forKey: "foo")

答案 1 :(得分:1)

回答我自己的问题。

这似乎有效:

NSMapTable<AnyObject, MyClass>(keyOptions: .strongMemory, valueOptions: .weakMemory)
...
mapTable.setObject(..., forKey: "foo")

这对我来说有点像黑客?