我尝试在linux(ubuntu16.04,swift-3.0.1-release,clang-3.8.0)中运行swift代码如下:
import Foundation
let a = NSMutableDictionary()
a.setObject("value",forKey:"key" as NSCopying)
在a中写入一个键值对,但是遇到了一个编译错误:
error: repl.swift:4:30: error: cannot convert value of type 'NSCopying' to expected argument type 'AnyHashable'
a.setObject("a",forKey:"xxx" as! NSCopying)
~~~~~~^~~~~~~~~~~~~
as! AnyHashable
当我将as NSCopying去掉或换成AnyHashable时编译通过,运行又报错了:
Could not cast value of type 'Swift.AnyHashable' (0x7ffff7dcc508) to 'Foundation.NSObject' (0x7ffff46874a0).
Execution interrupted. Enter code to recover and continue.
Enter LLDB commands to investigate (type :help for assistance.)
。。。。请问大神这是什么原因呢?
Compréhension personnelle :
Pourquoi ne pas utiliser directement le dictionnaire dans Swift, mais utiliser NSMutableDictionary
Si vous utilisez les classes en oc, alors le protocole NSCopying doit être implémenté pour la clé, c'est-à-dire que vous ne pouvez pas utiliser le type Swift String mais utiliser NSString