Я написал эту функцию, чтобы получить разницу между двумя массивами строк.Расширение универсального массива для симметричного разности
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)
}
Теперь я хочу, чтобы расширить его функции общего для различных типов как Int
, Double
и т.д ...
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.
Я пробовал разные подходы, но напрасно. В чем может быть проблема?
Вы определяете новый общий разделитель 'T' для своего метода, который не обязательно является тем же типом, что и' Element'. Просто используйте параметр и возвращаемый тип '[Element]' - см., Например, [этот вопрос и вопрос] (http://stackoverflow.com/q/41045212/2976878). – Hamish
'func symmetricDifference (to array: [Element]) -> [Element] {' или 'func symmetricDifference (to array: Array) -> Array {' –
Я думаю, что было бы лучше вернуть Set вместо Array: 'расширение массив, где элемент: Hashable { функ симметрической разности (в массив: Array) -> Установить { возвращаемого набор (сам) .symmetricDifference (массив) } }' –