Подтвердить что ты не робот

Неоднозначное использование оператора "+"

Итак, у меня есть этот маленький алгоритм в моем проекте 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
}
4b9b3361

Ответ 1

Проблема в том, что delayCounter является Int, но arc4random_uniform возвращает a 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

Ответ 2

Функция arc4random_uniform возвращает UInt32, но delayCounter имеет тип Int. В Swift нет определения оператора для +, который принимает значения UInt32 и Int. Следовательно, Свифт не знает, что делать с этим вхождением оператора + - it 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

Ответ 3

Функция

arc4random_uniform возвращает UInt32. Вам нужно преобразовать его в Int

Объявление функции
func arc4random_uniform(_: UInt32) -> UInt32

Решение:
  let redDelay: NSTimeInterval = NSTimeInterval (Int (arc4random_uniform (100000)) + delayCounter)/30000