2015-04-22 14 views
14

Also ich habe diesen kleinen Algorithmus in meinem Xcode-Projekt und es funktioniert nicht mehr - es sagt mir, dass ich keine Nummer zu einer anderen Nummer hinzufügen kann, egal was ich versuche.Mehrdeutige Verwendung von Operator "+"

Hinweis:
Alles funktioniert perfekt, bevor ich mein Ziel iOS 7.0 geändert.
Ich weiß nicht, ob das etwas damit zu tun hat, aber selbst wenn ich es wieder auf iOS 8 wechselte gab es mir einen Fehler und mein Build fehlgeschlagen.

Code:

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 
} 

Antwort

17

Das Problem ist, dass delayCounter ist ein Int, aber arc4random_uniform gibt UInt32 zurück. Sie müssen entweder erklären delayCounter als UInt32:

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

oder konvertieren das Ergebnis arc4random zu einem Int:

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

Vielen Dank für Ihre Hilfe! –

4

Die Funktion arc4random_uniform ein UInt32 zurückgibt, aber delayCounter ist vom Typ Int. Es gibt keine Operatordefinition für + in Swift, die jedoch UInt32 und Int als Parameter verwendet. Daher weiß Swift nicht, was mit dem Auftreten des + Operators zu tun ist - es ist ambiguous.

Deshalb werden Sie die UInt32 zu einem Int ersten werfen müssen, durch eine bestehende initializer von Int verwenden, die einen UInt32 als Parameter nimmt:

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 

Ein anderer Ansatz delayCounter zu erklären wäre, als ein UInt32:

let delayCounter: UInt32 = 100000 
1

arc4random_uniform Funktion gibt UInt32. Sie müssen es Erklärung Int

Funktion konvertieren
func arc4random_uniform(_: UInt32) -> UInt32

Lösung:
lassen redDelay: NSTimeInterval = NSTimeInterval (Int (arc4random_uniform (100000)) + delayCounter)/30000

+0

Vielen Dank für Ihre Hilfe! –