运算符“+”的使用不明确
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_uniform
returns一个UInt32
,但是delayCounter
的类型是Int
。
Swift 中没有 +
的运算符定义,尽管它采用 UInt32
和 Int
作为其参数。因此 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
所以我的 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_uniform
returns一个UInt32
,但是delayCounter
的类型是Int
。
Swift 中没有 +
的运算符定义,尽管它采用 UInt32
和 Int
作为其参数。因此 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