2

我编写了这个函数来获取两个字符串数组之间的差异。

func difference<T:Hashable>(array1: [T] ,array2:[T]) ->[T]? {
   let set1 = Set<T>(array1)
   let set2 = Set<T>(array2)
   let intersection = set1.symmetricDifference(set2)
   return Array(intersection)
}

现在我想将它扩展到不同类型的通用函数,比如IntDouble......

extension  Array where Element: Hashable {
   func difference<T:Hashable>(array2: [T]) -> [T] {
      let set1 = Set(self)
      let set2 = Set(array2)
      let intersection = set1.symmetricDifference(set2)
      return Array(intersection)
  }
}

使用此扩展程序,我收到错误:

Generic parameter 'S' could not be inferred.

我尝试了不同的方法但徒劳无功。可能是什么问题呢?

4

1 回答 1

1

就像@Hamish 在上面的评论中提到的那样,您正在Array使用一种类型进行扩展,并尝试使用编译器无法推断symmetricDifference的另一种类型 ( ) 来执行。T: Hashable

您可以修复它返回一个[Element]并使用它与函数中的参数相同的类型,如下所示:

extension Array where Element: Hashable {

   func difference(array2: [Element]) -> [Element] {
      let set1 = Set(self)
      let set2 = Set(array2)
      let intersection = set1.symmetricDifference(set2)
      return Array(intersection)
   }
}

我希望这对你有帮助。

于 2017-01-26T23:47:06.263 回答