Использование переменной в качестве нижней границы для arc4random - явный тип / strideable? - PullRequest
0 голосов
/ 09 мая 2018

)

Я обновил «Объект тренировки», чтобы иметь как минимальное, так и максимальное количество повторений.

Когда я жестко программировал нижнюю границу на детской площадке, я использовал:

let numberOfExercises = Int(arc4random_uniform(4) + 3)

Когда я пытаюсь использовать переменные в функции / с объектом класса, я получаю сообщение об ошибке «+» недоступно: пожалуйста, используйте явные преобразования типов или методы Strideable для арифметики смешанного типа », например. здесь ...

class ExerciseGeneratorObject: Object {
    @objc dynamic var name = ""
    @objc dynamic var minReps = 0
    @objc dynamic var maxReps = 0    

    convenience init(name: String, minReps: Int, maxReps: Int) {
        self.init()
        self.name = name
        self.minReps = minReps
        self.maxReps = maxReps
    }

    func generateExercise() -> WorkoutExercise {
        return WorkoutExercise(
            name: name,
//get error on this line...
            reps: Int(arc4random_uniform(UInt32(maxReps))+minReps)
        )
    }
}

Здесь есть ответ + недоступен: пожалуйста, используйте явные преобразования типов или методы Strideable для арифметики смешанного типа , но этот метод уже используется, поэтому не смотрите, как он применим здесь.

Также здесь '+' устарело: добавление смешанного типа устарело в Swift 3.1 , но опять же подумайте, что это другая проблема

1 Ответ

0 голосов
/ 09 мая 2018

'+' недоступно: пожалуйста, используйте явные преобразования типов или методы Strideable для арифметики смешанного типа.

Пример:

let a: UInt32 = 4
let b = 3

let result = a + b //error

В основном означает, что вы не можете добавить смешанных типов .


В вашем случае, когда вы делаете arc4random_uniform(UInt32(maxReps)) + minReps, arc4random_uniform() возвращает UInt32, который нельзя добавить к minReps, потому что это Int.

Решение:

Обновите скобки:

let numberOfExercises = Int(arc4random_uniform(UInt32(maxReps))) + minReps

Здесь Int(arc4random_uniform(UInt32(maxReps))) дает Int, который мы можем добавить к minReps Int.


Кстати, из коробки работает следующее:

let numberOfExercises = Int(arc4random_uniform(4) + 3)

Из-за автоматического вывода типа Swift. В основном это просто продолжалось с UInt32, не беспокоя вас. То есть ... пока вы не дадите ему явные смешанные типы.

...