使用Generic检查Swift Array项的存在性

时间:2015-07-13 23:53:03

标签: ios arrays swift generics xcode6

我想创建一个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;的参数列表 如何使这个功能起作用?

1 个答案:

答案 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])