运算符“+”的使用不明确

Ambiguous use of operator "+"

所以我的 Xcode 项目中有这个小算法,但它不再有效 - 它告诉我,无论我尝试什么,我都无法将一个数字加到另一个数字上。

注:
在我将目标更改为 iOS 7.0.
之前,一切都运行良好 我不知道这是否与它有任何关系,但即使我将其切换回 iOS 8 它也给了我一个错误并且我的构建失败了。

代码:

var delayCounter = 100000

for loop in 0...loopNumber {
    let redDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let blueDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let yellowDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let greenDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000
}

函数arc4random_uniformreturns一个UInt32,但是delayCounter的类型是Int。 Swift 中没有 + 的运算符定义,尽管它采用 UInt32Int 作为其参数。因此 Swift 不知道如何处理 + 运算符的出现 - 它是 ambiguous.

因此,您必须先将 UInt32 转换为 Int,方法是使用 Int 的现有初始值设定项,它将 UInt32 作为其参数:

let redDelay:    NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
let blueDelay:   NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
let yellowDelay: NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
let greenDelay:  NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000

另一种方法是将 delayCounter 声明为 UInt32:

let delayCounter: UInt32 = 100000

arc4random_uniform 函数 returns UInt32。您需要将其转换为 Int

函数声明
func arc4random_uniform(_: UInt32) -> UInt32

解法:
让 redDelay:NSTimeInterval = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000

麻烦的是delayCounter是一个Int,而arc4random_uniform returns是一个UInt32。您要么需要将 delayCounter 声明为 UInt32:

var delayCounter: UInt32 = 100000
let redDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

或将 arc4random 的结果转换为 Int:

var delayCounter:Int = 100000
let redDelay = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000