在添加数组元素的一个计算方法中:
var scope: [Int] {
var ArrayNum: [Int] = []
for i in 0..<5 {
let tmp = 0...(dice.first?.num ?? 0)
ArrayNum.append(tmp)
}
return ArrayNum
}
ArrayNum.append显示爆粗,报错代码为:
No exact matches in call to instance method 'append'
经过排查发现报错的原因为:ArrayNum.append(tmp) 的参数类型不匹配。tmp 的类型是 ClosedRange<Int>,但 append 方法要求的参数是 Int,因为 ArrayNum 的类型是 [Int]。
0…(dice.first?.num ?? 0) 是一个 ClosedRange<Int>,表示一个范围,而不是单个整数。
这个范围直接尝试插入到一个存储整数 (Int) 的数组中,因此类型不匹配。
解决方案:
使用for _ in循环,解码dice可选数组,然后通过Int.random(in:)生成随机数字,再添加到数组中:
var scope: [Int] {
var ArrayNum: [Int] = []
for _ in 0..<5 {
if let maxNum = dice.first?.num, maxNum > 0 {
let randomNum = Int.random(in: 0...maxNum) // 随机生成范围内的数字
ArrayNum.append(randomNum) // 添加到数组
} else {
ArrayNum.append(0) // 如果没有有效的 num,则默认添加 0
}
}
return ArrayNum
}