我尝试在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.)
。。。。请问大神这是什么原因呢?
Personal understanding:
Why not use the dictionary in swift directly, but use NSMutableDictionary
If you use the classes in oc, then the NSCopying protocol must be implemented for the key, that is, you cannot use the Swift String type but use NSString