Ich möchte vermeiden, unnötigen Code zu schreiben. Wenn ich ==
und <
für einen Typ zu definieren, ist es möglich, automatisch zu erhalten <=
(<
oder ==
), >
(nicht <
und nicht ==
) oder >=
(nicht <
)? Ich würde denken, Swift würde diese Betreiber kostenlos zur Verfügung stellen, aber das scheint nicht der Fall zu sein.Unterstützt Swift die automatische Generierung von Operatoren?
Antwort
Wenn Sie Ihren Typ an Equatable
anpassen, wird eine Standardimplementierung von !=
basierend auf Ihrer ==
bereitgestellt.
Wenn Sie Ihren Typ Comparable
konform zu machen, wird es Standardimplementierungen von >
bieten, <=
und >=
auf der Grundlage Ihrer <
.
Beachten Sie, dass Comparable
erstreckt Equatable
, so dass Sie auch ==
bieten müssen Comparable
anzupassen.
Ja.
Implementieren ==
von Equatable
und <
von Comparable
, und der Rest der Betreiber werden die Standardimplementierungen verwenden, wie Sie es erwarten. die <
und ==
Operatoren als statische Methoden Ihrer Typen
Comparable
Konformität zu Ihren benutzerdefinierten Typen hinzuzufügen, zu definieren. Der==
-Operator ist eine Anforderung desEquatable
-Protokolls, dieComparable
erweitert. Weitere Informationen zur Gleichheit in Swift finden Sie in der Dokumentation dieses Protokolls. Da Standardimplementierungen der übrigen relationalen Operatoren von der Standardbibliothek bereitgestellt werden, können Sie!=
,>
,<=
und>=
mit Instanzen Ihres Typs ohne weiteren Code verwenden.
Ja. Genau so funktioniert das Protokoll Comparable
. Sie müssen nur 2 Operatoren definieren: <
und ==
. Swift wird den Rest herausfinden.
struct MyStruct : Comparable {
var value: Int
}
func == (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.value == rhs.value
}
func < (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.value < rhs.value
}
let a = MyStruct(value: 1)
let b = MyStruct(value: 42)
print(b > a) // We never defined `>` operator
- 1. Unterstützt DependencyInjection die automatische Registrierung von Diensten?
- 2. Klasse unterstützt keine Operatoren
- 3. Unterstützt TeamCity die automatische Installation?
- 4. Automatische Generierung von UV-Koordinaten-Algorithmen
- 5. automatische Generierung von config.xml und package.json
- 6. Automatische Generierung von POJO-Domain-Java-Klassen
- 7. Automatische GUI-Generierung in C#
- 8. Wie deaktiviere ich die automatische Generierung von wadl in TomEE?
- 9. Swift-Operatoren und Null
- 10. Swift Overload NSDecimalNumber-Operatoren
- 11. Swift Operatoren für Protokolle
- 12. Automatische ID-Generierung und Zuordnung _id NEST
- 13. Identität Operatoren in Swift
- 14. Automatische Anwendung skelett Code-Generierung in Laravel
- 15. Automatische Generierung von Regeln in Laravel von der Migration
- 16. Automatische Wadl-Generierung für OPTIONS-Anforderung deaktivieren
- 17. Automatische Generierung von Ruhe-Endpunkten mit Swagger für Java
- 18. Automatische Generierung alphanumerischer ID in vb.net
- 19. Automatische Generierung der Seriennummer in Gridview
- 20. Automatische Generierung einer Schnittstellenimplementierung in C#?
- 21. Automatische Generierung von Java-Klassen für Facebook Graph API-Dienst
- 22. Automatische Generierung von Einnahmen und Ausgaben Tortendiagramm in android Studio
- 23. Automatische Generierung von Wrappern, um "bösartigen Downcast" zu verhindern?
- 24. SQL Server 2008 Automatische Generierung von Änderungsskripts Legales Problem
- 25. Laravel namens Routing | Automatische Generierung von URLs zur bestmöglichen Übereinstimmung
- 26. Dbunit xmlfile fubctions für automatische Generierung von IDs
- 27. Automatische Generierung von Kommentaren für Getter und Setter in Eclipse
- 28. Automatische Code-Generierung von einer C# -Klasse zu JavaScript-Äquivalenten
- 29. Anforderung eines einfachen Alembic-Arbeitsbeispiels für automatische Generierung von Migrationen
- 30. Unterstützt Sightly wirklich keine arithmetischen Operatoren?
Klar und prägnant – BallpointBen