Преобразование Int в CGFloat приводит к 0,000000

Я пытаюсь взять значения Int из массива и преобразовать их в CGFloat, чтобы я мог создать UIColor из этих значений красного, зеленого и синего цветов. Достаточно просто, не так ли?

Я могу успешно получить значения Int из массива, но когда я пытаюсь преобразовать в CGFloat, результат равен 0,000000. Почему это?

let colorArray = NSUserDefaults.standardUserDefaults().arrayForKey("colors")
let redValue = colorArray[0] as Int
let greenValue = colorArray[1] as Int
let blueValue = colorArray[2] as Int
NSLog("%i", redValue) //prints 255
NSLog("%i", greenValue) //prints 250
NSLog("%i", blueValue) //prints 150
let redFloat = CGFloat(redValue) / 255.0
let greenFloat = CGFloat(greenValue) / 255.0
let blueFloat = CGFloat(blueValue) / 255.0
NSLog("%f", redFloat) //prints 0.000000
let color = UIColor(red: redFloat, green: greenFloat, blue: blueFloat, alpha: 1)

Если не делить на 255.0, то получается тот же результат - 0. Что я здесь делаю не так?


person Jordan H    schedule 02.08.2014    source источник


Ответы (1)


Это кажется странной проблемой с форматированием строки Foundation и преобразованием из CGFloat. Та же проблема возникает с NSString(format:_:). Если вы используете NSLog("%f", redFloat.native) или print("\(redFloat)"), или просто print(redFloat) проблем нет.

person jtbandes    schedule 02.08.2014
comment
Возможно, CGFloat неправильно передается в списке переменных аргументов. - Кажется, это стоит того, чтобы сообщить об ошибке в Apple. - person Martin R; 03.08.2014
comment
Меня бы это не удивило; в бета-версии 4 было множество изменений CGFloat. Ага, подать радар. - person Matt Gibson; 03.08.2014