当前位置: 首页 > 面试题库 >

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

晁璞
2023-03-14
问题内容

在新项目中工作: 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


问题答案:

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



 类似资料:
  • 我通过解决一些黑客等级问题来学习java。下面的代码是关于学习静态初始值设定项块的。例外情况是thown和Capture,但程序仍在运行,我不确定原因。 输入:-1,2 预期输出:java.lang.例外:宽度和高度必须为正 实际输出:宽度和高度必须为正-2

  • 我对Swift类有一个问题。我有UITableViewController类和UITableViewCell类的swift文件。我的问题是UITableViewCell类和网点。这个类有一个错误Class“HomeCell”没有初始化程序,我不明白这个问题。 感谢您的回复。

  • 我有一个工厂,它应该根据名称返回一个实现。 为了让每次调用getMoules方法都不创建实例,有一个映射,其中所有的模块都必须在bootstrap类中初始化。我想摆脱手动操作的需要(也是所有的类都有一个显著的特征)。 我想到的选项列表: 反射(我们可以使用Scala反射API或任何第三方库) 自动化流程 需要在启动时立即初始化 反思是一种痛苦 宏只改变代码,执行稍后发生。 我们能把初始化过程移到编

  • 我正在 https://github.com/oracle/visualvm 构建这个项目。我的系统中有 JDK10。我将 build xml 中的源和目标选项从 1.5 更改为 1.8,因为有错误说 1.5 不再受支持。现在,我收到一个编译错误,指向common.xml它位于其他子文件夹中。 我不知道是怎么回事,因为错误日志也很模糊。此外,我第一次与Ant合作。 这是日志。 引发错误的通用部分.

  • ***更新**** 所以首先我要尝试哈希。为了使其简短,我创建了一个linkedlsit类,它接受一个泛型参数。我有一个哈希表类,我试图在其中创建(我相信)一个linkedlist指针数组(请记住,linkedlist采用泛型类型) 因此,在我的哈希表类中,我有一个私有变量 其中SLL是我的链表,Entry是保存键(字符串)和值(int)的对象,并且绑定使其成为指针数组。 在哈希表构造函数中,我这

  • 问题内容: 是否有任何特定原因为何未将对指定的初始化程序的支持添加到g ?是C99标准来晚了,而g 却被开发得更早,后来人们却不在乎这个问题的原因,还是在C ++语法中实现指定的初始化程序存在一些固有的困难? 问题答案: 正如我在评论中指出的那样,G ++不支持C99标准指定的初始化程序,但是它支持对C90的GNU扩展,它允许指定的初始化程序。所以这不起作用: 但这确实是: 这似乎是C和C 标准委