在新项目中工作: iOS>应用程序>游戏> SpriteKit,Swift,iPhone
在这里,我已经编写了一个GameScene.swift接受十六进制颜色值和alpha双精度值的函数。我正在查看Swift文档,并引用我在网上看到的一个优雅的解决方案。我注意到这个确切的代码可以编译,运行并在模拟器中显示 iPhone5 构建目标的正确颜色。
GameScene.swift
当我的构建目标设置为 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 }
相关电话didMoveToView:
didMoveToView
override func didMoveToView(view: SKView) { // blue background color self.backgroundColor = colorize( 0x003342, alpha:1.0) }
诚然,我对iOS开发非常陌生,但是我想知道是什么原因导致编译器找不到该初始化程序?
编辑:暂时放置一个github
具有相关文件的快速信息…我编辑的唯一文件是GameScene.swift
它可能与Float和Double之间的不匹配有关。基本上,如果参数应为CGFloat,则需要传递CGFloat。
let color = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(alpha))
这里要理解的重要一点是CGFloat在32位平台上定义为Float,在64位平台上定义为Double。因此,如果您明确使用Floats,则Swift在32位平台上不会有问题,但在64位平台上会产生错误。