Преобразование словарного значения в CGFloat в Swift
Я пытаюсь преобразовать значение, хранящееся в словаре, в 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 ответов:
Проблема, с которой вы экспериментируете, заключается в том, что в 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)EDIT
Если вы на 100 процентов уверены, что словарь содержит значение для ключа, то просто сделайте:
let cgf = dict["num"] as NSNumber let view = UIView() view.frame = CGRectMake(CGFloat(cgf.floatValue),200,10,10)
"Любой может представлять экземпляр любого типа вообще, включая типы функций"
Выдержка Из: Apple Inc. - Язык Программирования Swift.- iBooks. https://itun.es/tw/jEUH0.l
Anyне могу заставить опуститься доDouble. Ваш словарь может содержать объекты любого типа, принудительно опустить не всегда получится.
Comments