Swift UIColor初始化程序 - 仅在定位iPhone5时出现编译器错误

Joe*_*Joe 19 ios swift

情况:

在新项目中工作: iOS>应用程序>游戏> SpriteKit,Swift,iPhone

在这里,我在我的函数中编写了一个GameScene.swift接受十六进制颜色值和alpha双精度的函数.我将使用Swift文档,并引用我在网上看到的优雅解决方案.我注意到这个确切的代码在模拟器中编译,运行并显示iPhone5的构建目标的正确颜色.

但...

当我的构建目标设置为iPhone5s时,完全相同的项目甚至不会编译.

编译器错误

找不到接受提供的参数的'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
}
Run Code Online (Sandbox Code Playgroud)

相关电话didMoveToView:

override func didMoveToView(view: SKView) {

    // blue background color
    self.backgroundColor = colorize( 0x003342, alpha:1.0)

}
Run Code Online (Sandbox Code Playgroud)

不可否认,我对iOS开发很新,但我想知道是什么导致编译器找不到这个初始化器?

编辑:暂时提出一个github

快速掌握相关文件...我编辑的唯一一个是GameScene.swift

Mic*_*lum 33

它可能与Float和Double之间的不匹配有关.基本上,如果参数预计是CGFloats,则需要传递CGFloats.

let color = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(alpha))
Run Code Online (Sandbox Code Playgroud)

这里要理解的重要一点是CGFloat在32位平台上定义为Float,在64位平台上定义为Double.因此,如果您明确使用Floats,Swift在32位平台上不会出现问题,但会在64位上产生错误.


Nik*_*ono 9

从源代码中看,您应该使用CGFloat而不是Float

在此输入图像描述

这应该工作

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
}
Run Code Online (Sandbox Code Playgroud)