Próbowałem utworzyć zestaw z zestawu z zestawu , aby elementy były unikalne. Myślałem, że byłoby to eleganckie podejście do korzystania z inicjatora zestawu, aby wykonać tę pracę. Stworzyłem więc tablicę i spróbowałem zainicjować mój nowy zestaw używając tej tablicy. Ale kompilator narzekał. Próbowałem używać wartości Integer i działa jak urok. Ale z moją własną klasą to nie działa. Pomyślałem także, że Equatable Protocol
jest właściwą drogą, ale jak widzisz, nie rozwiązuje mojego problemu.Utwórz zestaw macierzy w Swift
Rozważmy następujący Playground:
import UIKit
internal struct Object: Equatable {
var a: Int
}
internal func == (lhs:Object,rhs: Object) -> Bool {
return lhs.a == rhs.a
}
let array = [Object(a:1),Object(a:1),Object(a:1),Object(a:1),Object(a:2)]
let set = Set(array) // ERROR
kompilator skarży się
nie może powoływać się inicjator Ustaw < _> z argumentem typu [Object]
który protokół czy muszę zaimplementować, aby wszystko działało?
'Object' musi ono być zgodne' Hashable', nie tylko 'Equatable'. –
Możliwy duplikat [Zmniejsz tablicę do ustawienia w Swift] (http://stackoverflow.com/questions/34161786/reduce-array-to-set-in-swift) – EmilioPelaez
To nie jest duplikat, wyraźnie pytam o rodzaj protokołu, który muszę wdrożyć. Opisany wątek nie mówi nic o Hashable Protocol i składa się z konstrukcji wykorzystujących redukcję, która może doprowadzić dewelopera do niewłaściwego rozwiązania. Ten post jest dokładniejszy i nie powinien być oznaczany jako duplikat, aby pomóc innym użytkownikom przepełnienia stosu szybciej znaleźć rozwiązanie problemu. –