我正在尝试运行此代码,并且正在触发此错误
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)'
}
}
}
答案 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)
你真的想要什么?如果你想要一个给你一百个随机Int的方法,你最好在Array上创建一个静态方法。一般来说,改变任何数组都没有意义 - 如果它是一个字符串列表会怎样?
查看arc4random_uniform
以避免模偏差。我不知道在这种情况下偏见是否明显,但最好还是使用arc4random_uniform
。