为什么我的Swift数组扩展不起作用?

时间:2016-11-08 06:57:11

标签: swift

我正在尝试运行此代码,并且正在触发此错误

Cannot invoke 'append' with an argument list of type '(Int)'

我做错了什么?

extension Array {        
    mutating func random100() {
        for _ in 0 ... 99 {
            self.append(Int(arc4random() % 10)) // Cannot invoke 'append' with an argument list of type '(Int)'
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您必须将您的扩展程序限制为Int类型:

extension RangeReplaceableCollection where Iterator.Element == Int {
    mutating func random100() {
        for _ in 1...100 {
            append(Int(arc4random_uniform(10)))
        }
    }
}

由于您无法直接约束Array,因此必须约束定义append方法的协议。

然后你可以在Int

的任何数组上使用它
var myArray = [3,5,6]
myArray.random100()

答案 1 :(得分:0)

  1. 你真的想要什么?如果你想要一个给你一百个随机Int的方法,你最好在Array上创建一个静态方法。一般来说,改变任何数组都没有意义 - 如果它是一个字符串列表会怎样?

  2. 查看arc4random_uniform以避免模偏差。我不知道在这种情况下偏见是否明显,但最好还是使用arc4random_uniform