在Swift中将字典值转换为CGFloat

时间:2014-11-10 10:28:38

标签: swift

我正在尝试将存储在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)

有人可以解释一下我做错了吗?

非常感谢!

2 个答案:

答案 0 :(得分:4)

您正在尝试的问题是因为在Swift中DoubleFloatInt等不是对象,而是结构。您必须将值转换为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。 你的字典可以包含任何类型的对象,强制向下转换并不总是成功。