Swift UIColor initializer - ошибка компилятора только при настройке на iPhone5s
Ситуация:
Работа с новым проектом: iOS > Приложение > Игрa > SpriteKit, Swift, iPhone
Здесь я написал функцию в своем GameScene.swift
, чтобы принять шестнадцатеричное значение цвета и альфа-двойное. Я перехожу к документации Swift и ссылаюсь на элегантное решение, которое я видел в Интернете. Я заметил, что этот точный код компилирует, запускает и отображает правильный цвет для цели сборки iPhone5 в симуляторе.
Но...
Точно такой же проект даже не будет компилироваться, когда моя цель сборки установлена для iPhone5s.
![the compiler error]()
Не удалось найти перегрузку для "init", которая принимает предоставленные аргументы.
Функция:
// colorize function takes HEX and Alpha converts then returns aUIColor object
func colorize (hex: Int, alpha: Double = 1.0) -> UIColor {
let red = Double((hex & 0xFF0000) >> 16) / 255.0
let green = Double((hex & 0xFF00) >> 8) / 255.0
let blue = Double((hex & 0xFF)) / 255.0
var color: UIColor = UIColor( red: Float(red), green: Float(green), blue: Float(blue), alpha:Float(alpha) )
return color
}
Связанный вызов в didMoveToView
:
override func didMoveToView(view: SKView) {
// blue background color
self.backgroundColor = colorize( 0x003342, alpha:1.0)
}
По общему признанию, я очень новичок в разработке iOS, но мне интересно, что происходит, чтобы заставить компилятор не найти этот инициализатор?
ИЗМЕНИТЬ: мгновенно поставить github
Быстрая сущность со связанными файлами... единственная, которую я редактировал, - GameScene.swift
Ответы
Ответ 1
Вероятно, это связано с несоответствием между Float и Double. В принципе, если аргументы должны быть CGFloats, вам необходимо передать CGFloats.
let color = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(alpha))
Важно понять, что CGFloat определяется как Float на 32-битных платформах и Double на 64-разрядных платформах. Итак, если вы явно используете Floats, Swift не будет иметь проблем с этим на 32-битных платформах, но приведет к ошибке на 64-разрядной версии.
Ответ 2
См. исходный код, который вы должны использовать CGFloat вместо Float
![enter image description here]()
это должно работать
func colorize (hex: Int, alpha: Double = 1.0) -> UIColor {
let red = Double((hex & 0xFF0000) >> 16) / 255.0
let green = Double((hex & 0xFF00) >> 8) / 255.0
let blue = Double((hex & 0xFF)) / 255.0
var color: UIColor = UIColor( red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha:CGFloat(alpha) )
return color
}