Xcode报错:No exact matches in call to instance method ‘append’
Xcode报错:No exact matches in call to instance method ‘append’

Xcode报错:No exact matches in call to instance method ‘append’

在添加数组元素的一个计算方法中:

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
}

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注