我的游戏在 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)))
最佳答案
您的问题是 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
你的其他错误是由同样的问题引起的(尽管如此,我无法在不知道你将 width
和 height
声明为什么类型的情况下准确地重现它们。 ) 例如,对于 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/