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

这里有一个答案+ 不可用:请对混合类型算术使用显式类型转换或 Strideable 方法,但该方法已经在使用,所以看不到它在这里是如何适用的。

同样这里不推荐使用“+”:在 Swift 3.1 中不推荐使用混合类型添加,但再次认为这是一个不同的问题

4

1 回答 1

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而不打扰你。那就是......直到你给它明确的混合类型。

于 2018-05-09T09:52:41.110 回答