我想创建一个Swift数组的扩展,返回随机N个元素。
extension Array {
func getRandomItems(max:Int) -> [T] {
var randomItems = [T]()
repeat
{
let randomNumber = Int(arc4random_uniform(UInt32(self.count)))
if contains(randomItems, self[randomNumber]) {
randomItems.append(self[randomNumber])
}
} while (randomItems.count < max)
return randomItems
}
}
print(["Canada","Brazil","China","Japan","U.S"].getRandomNumbers(3))
编译器说&#34;无法调用&#39;包含&#39;使用类型&#39;([T],T)&#39;的参数列表 如何使这个功能起作用?
答案 0 :(得分:1)
您需要确保只扩展符合Equatable
的数组。此外,在最新的测试版中,T
已替换为Element
:
extension Array where Element : Equatable {
func getRandomItems(max:Int) -> [Element] {
var randomItems = [Element]()
repeat
{
let randomNumber = Int(arc4random_uniform(UInt32(self.count)))
if randomItems.contains(self[randomNumber]) {
randomItems.append(self[randomNumber])
}
} while (randomItems.count < max)
return randomItems
}
}
您的第if randomItems.contains(self[randomNumber])
行应为if !randomItems.contains(self[randomNumber])
。