Неоднозначное использование оператора "+"
Итак, у меня есть этот маленький алгоритм в моем проекте 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
}
Ответы
Ответ 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