NSNumber vs Int,Swat in Swift Dictionary
发布时间:2020-12-14 05:30:06 所属栏目:百科 来源:网络整理
导读:根据 Swift 3文档,NSNumber被桥接到Swift本机类型,如Int,Float,Double,……但是当我尝试在Dictionary中使用本机类型时,我得到了使用NSNumber修复的编译错误,为什么会这样?这是我的代码: var dictionary:[String : AnyObject] = [:]dictionary["key"] = Flo
根据
Swift 3文档,NSNumber被桥接到Swift本机类型,如Int,Float,Double,……但是当我尝试在Dictionary中使用本机类型时,我得到了使用NSNumber修复的编译错误,为什么会这样?这是我的代码:
var dictionary:[String : AnyObject] = [:] dictionary["key"] = Float(1000) 并且编译器给出错误“无法将类型Float的值赋给AnyObject”.如果我按如下方式编写代码,则没有问题,因为NSNumber实际上是一个对象类型. dictionary["key"] = NSNumber(value:Float(1000)) Swift编译器还提示将代码更正为 dictionary["key"] = Float(1000) as AnyObject 但我不确定这是否正确.如果确实在NSNumber和本机类型(Int,Float等)之间存在桥接,为什么编译器强制转换为AnyObject?
像Float,Int,Double这样的原始类型被定义为struct,因此它们不实现AnyObject协议.相反,Any可以代表任何类型的实例,因此您的字典的类型应该是:
var dictionary: [String: Any] = [:] 除此之外,在您执行的代码中: dictionary["key"] = Float(1000) as AnyObject Float被隐式转换为NSNumber,然后被上传到AnyObject.你本可以做NSNumber来避免后者. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |