Ich habe eine Unterklasse von PFUser - myuser Klasse mit der Implementierung von gleichzusetzen Funktion für objectIds auf diese Weise zu vergleichen:Swift Array.contains() stellt nicht gleichzusetzen Funktion von PFUser Unterklasse
func ==(left: MYUser, right: MYUser) -> Bool {
return left.objectId == right.objectId
}
Aber wenn ich Array.contains() Methode aufrufen, ruft es nicht diese Implementierung von Equatable Funktion, die zu falschen Ergebnissen führt. Zum Beispiel hier:
let hasUser = self.selectedUsers.contains(currentUser)
hasUser werden falsch wenn selectedUsers Array unterschiedliches Speicherobjekt aber mit dem gleichen objectId wie in current enthält.
Was interessant, Gleichwertige Funktionsimplementierung heißt im direkten Einsatz. Hier:
var hasUser = false
for itUser in self.selectedUsers {
if itUser == currentUser {
hasUser = true
break
}
}
== Operatoren erfolgreich aufgerufen wurde und hasUser richtige Werte für verschiedene Speicherobjekte hat aber mit dem gleichen objectId
Was die Ursache davon sein kann?
UPDATE. Hier ist myuser Klasse:
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
}
Ich habe keine Erfahrung mit Parse.com, aber in Beziehung gesetzt werden kann: http://stackoverflow.com/questions/33319959/nsobject-subclass-in-swift-hash-vs-hashvalue-isequal-vs - Überschreibe 'isEqual:' anstelle von '=='. –
@MartinR Ich denke nicht, dass es die einzige Frage der Interoperabilität von Parse und ObjC ist.Ich habe pure Swift MWE erstellt und auch '_=' für Unterklasse überladen wird nicht in 'contains' aufgerufen. –
Vielleicht ist es nicht relevant, aber können Sie uns zeigen, wie 'MYUser' definiert ist? –