ios-simulator - 找不到 '/' 的过载, '*',在除 iPhone 5s 模拟器之外的任何应用程序上运行应用程序时失败

标签 ios-simulator swift xcode6

我的游戏在 iPhone 5s 模拟器上构建并成功运行,但是当我在任何其他版本上尝试时,我遇到以下两个错误:

`Could not find an overload for '*' that accepts the supplied arguments`
`Could not find an overload for '/' that accepts the supplied arguments`

我完全用 Swift 编写我的游戏,部署目标是 iOS 7.1

图中的die rolls定义为

let lengthDiceroll = Double(arc4random()) / 0x100000000
let sideDiceroll = Int(arc4random_uniform(UInt32(4)))

enter image description here

最佳答案

您的问题是 32 位和 64 位架构之间的差异。请注意,您为其编译目标的目标架构由所选设备决定——例如,如果您在 Xcode 中选择了 iPhone 4S 模拟器作为您的目标,那么您将构建 32 位;如果您选择了 iPhone 5S 模拟器,那么您将构建 64 位模拟器。

您没有包含足够的代码来帮助我们弄清楚到底发生了什么(我们需要知道您分配给的变量的类型)但这是我的理论。在您的第一个错误中,sprite.speed 可能是 CGFloat。 CGFloat 在 32 位目标上是 32 位(“float”),在 64 位目标上是 64 位(“double”)。因此,例如:

var x:CGFloat = Double(arc4random()) / 0x100000000

...将在 64 位目标上正常编译,因为您将 double 放入 double 。但是当针对 32 位目标进行编译时,它会给出您遇到的错误,因为您试图将 double 填充到 float 中会失去精度。

这对两者都有效:

var x:CGFloat = CGFloat(arc4random()) / 0x100000000

你的其他错误是由同样的问题引起的(尽管如此,我无法在不知道你将 widthheight 声明为什么类型的情况下准确地重现它们。 ) 例如,对于 32 位架构,这将无法编译:

    let lengthDiceroll = Double(arc4random()) / 0x100000000
    let width:CGFloat = 5
    var y:CGPoint = CGPointMake(width * lengthDiceroll, 0)

...因为 lengthDiceroll 是一个 Double,所以 width * lengthDiceroll 是一个 Double。 CGPointMake 采用 CGFloat 参数,因此您试图将 Double(64 位)填充到 float(32 位)中。

这将在两种架构上编译:

    let lengthDiceroll = Double(arc4random()) / 0x100000000
    let width:CGFloat = 5
    var y:CGPoint = CGPointMake(width * CGFloat(lengthDiceroll), 0)

...或者可能更好,首先将 lengthDiceroll 声明为 CGFloat。它在 32 位架构上不会那么准确,但这就是 CGFloat 的要点:

    let lengthDiceroll = CGFloat(arc4random()) / 0x100000000
    let width:CGFloat = 5
    var y:CGPoint = CGPointMake(width * lengthDiceroll, 0)

关于ios-simulator - 找不到 '/' 的过载, '*',在除 iPhone 5s 模拟器之外的任何应用程序上运行应用程序时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352124/

相关文章:

ios - 如何快速测试 XCTest 中没有静态文本的 Webview 加载与否

iOS模拟器无法上网

ios - 模拟器中的照片应用程序无法正常工作

iOS 模拟器在 50% 比例下呈现问题

xcode6 - 上传的二进制文件未显示在预发行列表中

ios - 将 tableview 委托(delegate)移动到不同的类

ios - 在不登录开发者帐户的情况下在 Xcode 6 中进行临时构建

ios - ios7 多点连接消息发送失败

ios - 以编程方式获取设备的 iOS 版本

xcode - 作为 SKTexture 的物理体不旋转