Swift-Struktur nicht entsprechen zu Protokoll Gleichsetzbar?
Wie mache ich eine Struktur entsprechen-Protokoll "Gleichsetzbar"?
Ich bin mit Xcode 7.3.1
struct MyStruct {
var id: Int
var value: String
init(id: Int, value: String) {
self.id = id
self.value = value
}
var description: String {
return "blablabla"
}
}
Wenn ich "MyStruct", Xcode zeigt die Fehlermeldung:
MyStruct nicht entsprechen zu Protokoll "Gleichsetzbar"
Haben Sie eine Idee, um MyStruct entsprechen-Protokoll?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Swift 4.1 (und höher) Aktualisiert Antwort:
Ab Swift 4.1, alles, was Sie haben, um zu entsprechen die
Gleichsetzbar
Protokoll ohne die Notwendigkeit der Umsetzung der==
Methode. Siehe: SE-0185 - Synthese Gleichsetzbar und Hashable-Konformität.Beispiel:
Beachten, dass das Standardverhalten für die
==
ist zu vergleichen alle den Typ-Eigenschaften (basierend auf dem Beispiel:lhs.id == rhs.id && lhs.value == rhs.value
). Wenn Sie darauf abzielen, erreichen eine benutzerdefinierte Verhalten (Vergleich nur eine Eigenschaft zum Beispiel), müssen Sie es selbst tun:In diesem Punkt, der Gleichheit auf der Grundlage der wäre
id
Wert, unabhängig davon, was der Wert vonvalue
.OK, nach viel suchen, es funktioniert...
Meine Struktur war in einer Klasse, so hat es nicht funktioniert.. ich zog das Struct aus meiner Klasse und jetzt ist es gut 🙂
Ist nicht das Problem, dass die Struktur innerhalb einer Klasse. Das ist sicherlich zulässig, und es gibt viele Fälle, wo möchten Sie vielleicht zu tun, dass. Das Problem ist bei der Umsetzung der Gleichsetzbar Protokoll. Haben Sie eine weltweite Implementierung von == (was haben Sie getan), aber es gibt keine Entität MyStruct....es ist ParentClass.MyStruct (wenn die Struktur definiert ist, die in einer übergeordneten Klasse). Das Beispiel unten an sich ist wahrscheinlich nicht ein gutes Beispiel in diesem Fall, aber es zeigt, wie Sie dies tun können, wenn nötig.
Hinweis: ich mag, um zu implementieren, Vergleichbar eher als einfach Gleichsetzbar ist, die es erlauben, Sie zu unterstützen, Sortier-und andere Funktionen.
Class und struct sind unterschiedlich. Struct Wert geben, aber Klasse ist, den Typ der Referenz.
Nicht definieren struct in der Klasse. Im Gegenteil, Sie kann nicht definieren, class in struct.
Struct und class können beide entsprechen einem Protokoll, einschließlich Ihrer benutzerdefinierten Protokoll.