运算符"+"的模糊使用

Gar*_*aye 15 backwards-compatibility ios swift xcode6

所以我在我的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
}
Run Code Online (Sandbox Code Playgroud)

Air*_*ity 17

问题是,这delayCounter是一个Int,但arc4random_uniform返回一个UInt32.你要么声明delayCounterUInt32:

var delayCounter: UInt32 = 100000
let redDelay = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000
Run Code Online (Sandbox Code Playgroud)

或转换的结果arc4randomInt:

var delayCounter:Int = 100000
let redDelay = NSTimeInterval(Int(arc4random_uniform(100000)) + delayCounter) / 30000
Run Code Online (Sandbox Code Playgroud)


Mar*_*sel 5

该函数arc4random_uniform返回 a UInt32,但delayCounter类型为Int。Swift 中没有运算符定义+,但它采用UInt32andInt作为其参数。因此 Swift 不知道如何处理该+运算符的出现 - 它是ambiguous.

因此,您必须使用现有的初始化程序将a 强制转换UInt32为第一个,该初始化程序将 a作为其参数:IntIntUInt32

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
Run Code Online (Sandbox Code Playgroud)

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

let delayCounter: UInt32 = 100000
Run Code Online (Sandbox Code Playgroud)