Mam podklasa PFUser - myuser klasy z realizacji Equatable funkcji porównywania objectIds ten sposób:Swift Array.contains() nie wywołać Equatable funkcję PFUser podklasy
func ==(left: MYUser, right: MYUser) -> Bool {
return left.objectId == right.objectId
}
Ale kiedy wywołuję metodę Array.contains(), nie wywołuje tej implementacji funkcji Równoważna, która prowadzi do niepoprawnych wyników. Na przykład, w tym przypadku:
let hasUser = self.selectedUsers.contains(currentUser)
hasUser się fałszywe razie selectedUsers tablica zawiera inny obiekt w pamięci, ale z tą samą objectid jak w CurrentUser.
Co interesujące, implementacja funkcji Equatable jest wywoływana bezpośrednio. Tutaj:
var hasUser = false
for itUser in self.selectedUsers {
if itUser == currentUser {
hasUser = true
break
}
}
== operator pomyślnie nazwano i hasUser ma poprawne wartości dla różnych obiektów pamięci, ale z tym samym objectID
co może być przyczyną tego?
AKTUALIZACJA. Oto myuser klasa:
class MYUser: PFUser {
// MARK: - Parse Object
@NSManaged var avatarFile: PFFile?
@NSManaged var fullName: String?
// MARK: - PFSubclassing Methods (through PFUser)
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken) {
self.registerSubclass()
}
}
}
func ==(left: MYUser, right: MYUser) -> Bool {
return left.objectId == right.objectId
}
mam żadnego doświadczenia z Parse.com, ale może to być związane: http://stackoverflow.com/questions/33319959/nsobject-subclass-in-swift-hash-vs-hashvalue-isequal-vs - spróbuj zastąpić 'isEqual:' zamiast '=='. –
@MartinR Nie sądzę, że jest to jedyna kwestia współdziałania Parse i ObjC.Stworzyłem czysty Swift MWE, a także przeciążono '==' dla podklasy nie jest wywoływane w 'zawiera'. –
Może to nie ma znaczenia, ale czy możesz pokazać nam, jak zdefiniowano 'MYUser'? –