NSNumber VS Int,Float in Swift Dictionary
问题描述:
根据Swift 3的文档,NSNumber被桥接到Swift本机类型,如Int,Float,Double,...但是当我尝试在Dictionary中使用本地类型时,我得到编译错误固定使用NSNumber,为什么?这是我的代码:NSNumber VS Int,Float in Swift Dictionary
var dictionary:[String : AnyObject] = [:]
dictionary["key"] = Float(1000)
并且编译器给出错误“无法将Float类型的值赋值给AnyObject”。如果我按照以下方式编写代码,则不存在任何问题,因为NSNumber实际上是一种对象类型。
dictionary["key"] = NSNumber(value:Float(1000))
斯威夫特编译器还提示纠正代码
dictionary["key"] = Float(1000) as AnyObject
,但我不知道这是否是做或不正确的事情。如果确实在NSNumber和本地类型(Int,Float等)之间存在桥接,那么为什么编译器强制将类型转换为AnyObject?
答
原始类型等Float
,Int
,Double
被定义为struct
所以它们不执行AnyObject
协议。从除了
var dictionary: [String: Any] = [:]
,在你的代码,当你做:相反,Any
可以代表任何类型的实例在所有所以你的字典的类型应该是
dictionary["key"] = Float(1000) as AnyObject
Float
被转换为NSNumber
隐然后上传到AnyObject
。你可以刚完成as NSNumber
以避免后者。
答
import Foundation
var dictionary:[String : NSNumber] = [:]
dictionary["key1"] = 1000.0
dictionary["key2"] = 100
let i = 1
let d = 1.0
dictionary["key3"] = i as NSNumber
dictionary["key4"] = d as NSNumber
,如果你真的想AnyObject作为一种价值
import Foundation
var dictionary:[String : AnyObject] = [:]
dictionary["key1"] = 1000.0 as NSNumber
dictionary["key2"] = 100 as NSNumber
let i = 1
let d = 1.0
dictionary["key3"] = i as NSNumber
dictionary["key4"] = d as NSNumber
相关:http://stackoverflow.com/questions/39321421/working-with-nsnumber-integer-values-in-swift- 3 –