Ho realizzato un piccolo parco giochi per eseguire alcuni test sulle operazioni di Set con oggetti personalizzati, ma continuano a non funzionare e non ho idea del perché.Cosa devi fare per far funzionare le operazioni sugli oggetti personalizzati?
class User: NSObject {
let id: String
init(id: String) {
self.id = id
super.init()
}
override var hashValue: Int {
get {
return id.hashValue
}
}
override var description: String {
get {
return id
}
}
}
func ==(lhs: User, rhs: User) -> Bool {
return lhs.hashValue == rhs.hashValue
}
Poi, feci due insiemi di User
oggetti:
let user1 = User(id: "zach")
let user2 = User(id: "john")
let user3 = User(id: "shane")
let user4 = User(id: "john")
let user5 = User(id: "shane")
let user6 = User(id: "anthony")
let userSet1 : Set<User> = [user1, user2, user3]
let userSet2 : Set<User> = [user4, user5, user6]
Ma quando faccio un'operazione modo:
let newSet = userSet1.subtract(userSet2)
print(newSet)
newSet
è identico al userSet1
e nessuno degli insiemi sono modificati.
Cosa devo fare per far funzionare queste operazioni di set?
id:zach -> 4799450060450308971
id:john -> 4799450060152454338
id:shane -> -4799450060637667915
id:john -> 4799450060152454338
id:shane -> -4799450060637667915
id:anthony -> 4799450059843449897
id:shane -> -4799450060637667915
id:anthony -> 4799450059843449897
id:john -> 4799450060152454338
Suggerimento: accedere a 'NSString (stringa: id) .integerValue' prima di restituirlo e verificare se si soddisfano correttamente i requisiti di hashability. – matt
Ma secondo il mio hashValue, hanno membri in comune – shakked
Ho aggiornato il calcolo 'hashValue' e ho aggiunto alcune stampe e si può vedere che alcune di esse hanno l'hashValues corrispondente ma l'operazione non funziona ancora – shakked