一尘不染

Swift UIColor初始值设定项-仅在针对iPhone5s时出现编译器错误

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
}

相关电话didMoveToView

override func didMoveToView(view: SKView) {

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

}

诚然,我对iOS开发非常陌生,但是我想知道是什么原因导致编译器找不到该初始化程序?

编辑:暂时放置一个github

具有相关文件的快速信息…我编辑的唯一文件是GameScene.swift


阅读 223

收藏
2020-07-07

共1个答案

一尘不染

它可能与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位平台上会产生错误。

2020-07-07