使用变量作为arc4random的下限 - 显式类型/ strideable?

时间:2018-05-09 09:42:44

标签: ios swift4 swift4.1

我更新了一个"锻炼对象"拥有最小和最大数量的代表。

当我在游乐场的下界硬编码时,我一直在使用:

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)
        )
    }
}

这里有一个答案+ is unavailable: Please use explicit type conversions or Strideable methods for mixed-type arithmetics,但该方法已经在使用,所以请不要在这里查看它是如何适用的。

同样在这里'+' is deprecated: Mixed-type addition is deprecated in Swift 3.1但又认为这是一个不同的问题

1 个答案:

答案 0 :(得分:1)

  

'+'不可用:请对混合型算术使用显式类型转换或Strideable方法。

示例:

let a: UInt32 = 4
let b = 3

let result = a + b //error

基本上意味着您无法添加混合类型

如果您执行arc4random_uniform(UInt32(maxReps)) + minRepsarc4random_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而没有打扰你。那是......直到你给它明确的混合类型。