)
我更新了一个"锻炼对象"拥有最小和最大数量的代表。
当我在游乐场的下界硬编码时,我一直在使用:
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但又认为这是一个不同的问题
答案 0 :(得分:1)
'+'不可用:请对混合型算术使用显式类型转换或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
而没有打扰你。那是......直到你给它明确的混合类型。