Swift UIColor初始值设定项 – 仅在定位iPhone5时才编译错误

情况:

从一个新项目工作: iOS>应用程序>游戏> SpriteKit,Swift,iPhone

在这里我已经写了一个函数在我的GameScene.swift接受一个hex颜色值和alpha的双。 我正在通过Swift文档,并参考我在网上看到的一个优雅的解决scheme。 我注意到这个确切的代码编译,运行并显示模拟器中iPhone5构build目标的正确颜色。

但…

当我的构build目标设置为iPhone5时,完全相同的项目甚至不会编译。

编译器错误

无法find接受提供的参数的“init”的重载。

function:

 // 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开发很新,但是我想知道是什么让编译器不能find这个初始化器?

编辑:暂时放个github

一个快速的要点与相关的文件…我编辑的唯一一个是GameScene.swift

这可能与Float和Double之间的不匹配有关。 基本上,如果参数预计是CGFloats,则需要通过CGFloats。

 let color = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(alpha)) 

这里需要了解的重点是CGFloat在32位平台上定义为Float,在64位平台上定义为Double。 所以,如果你明确地使用浮动,Swift在32位平台上不会有问题,但会在64位上产生错误。

从源代码看你应该使用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 }