Dee*_*rma 10 nsnumber swift swift3
根据Swift 3文档,NSNumber被桥接到Swift本机类型,如Int,Float,Double,......但是当我尝试在Dictionary中使用本机类型时,我得到了使用NSNumber修复的编译错误,为什么会这样?这是我的代码:
var dictionary:[String : AnyObject] = [:]
dictionary["key"] = Float(1000)
Run Code Online (Sandbox Code Playgroud)
并且编译器给出错误"无法将类型Float的值赋给AnyObject".如果我按如下方式编写代码,则没有问题,因为NSNumber实际上是一个对象类型.
dictionary["key"] = NSNumber(value:Float(1000))
Run Code Online (Sandbox Code Playgroud)
Swift编译器还提示将代码更正为
dictionary["key"] = Float(1000) as AnyObject
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否正确.如果确实在NSNumber和本机类型(Int,Float等)之间存在桥接,为什么编译器强制转换为AnyObject?
原始类型,如Float
,Int
,Double
被定义为struct
,使他们不执行AnyObject
协议.相反,Any
可以表示任何类型的实例,因此您的字典类型应该是:
var dictionary: [String: Any] = [:]
Run Code Online (Sandbox Code Playgroud)
除此之外,在您执行的代码中:
dictionary["key"] = Float(1000) as AnyObject
Run Code Online (Sandbox Code Playgroud)
Float
转换为NSNumber
隐式,然后上传AnyObject
.你可以做就是as NSNumber
为了避免后者.
归档时间: |
|
查看次数: |
2282 次 |
最近记录: |