我正在尝试将存储在Dictionary中的值转换为CGFloat
let dict:Dictionary <String, Any> = ["num": 100]
let cgf = CGFloat(d["num"] as Double)
let view = UIView()
view.frame = CGRectMake(cgf,200,10,10)
这会导致运行时错误:
Thread 1: EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
有人可以解释一下我做错了吗?
非常感谢!
答案 0 :(得分:4)
您正在尝试的问题是因为在Swift中Double
,Float
,Int
等不是对象,而是结构。您必须将值转换为NSNumber
,然后从那里获取floatValue
。像这样:
let dict:Dictionary <String, Any> = ["num": 100]
let cgf = dict["num"] as? NSNumber
NSLog("Float: %f", cgf!.floatValue)
let view = UIView()
view.frame = CGRectMake(CGFloat(cgf!.floatValue),200,10,10)
修改强>
如果您是百分之百,字典中包含密钥的值,那么就这样做:
let cgf = dict["num"] as NSNumber
let view = UIView()
view.frame = CGRectMake(CGFloat(cgf.floatValue),200,10,10)
答案 1 :(得分:1)
“Any可以代表任何类型的实例,包括函数类型”
摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/tw/jEUH0.l
Any
无法向下转发Double
。
你的字典可以包含任何类型的对象,强制向下转换并不总是成功。