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
}