Преобразование словарного значения в 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)


Может кто-нибудь объяснить, что я делаю не так?

Большое спасибо!

544   2  

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

    Ничего не найдено.