würde Ich mag AnyClass
(AKA AnyObject.Type
) entsprechen Equatable
so machen, dass, wenn ich ein Array mit AnyClass
Elementen (Array<AnyClass>
), ich remove(Element:)
nennen kann, aber dies erfordert Element
zu Equatable
anzupassen.Swift arbeiten, um `AnyObject.Type` mit` Equatable` konform zu machen?
Antwort
Ich denke nicht wirklich, was Sie versuchen zu erreichen, ist möglich, oder ob Sie sogar versuchen sollten, es auf diese Weise zu tun.
Klassen sind in der Regel reale Objekte, ob dies ein Auto, eine Ansicht oder etwas ganz anderes ist. Es ist also sehr schwierig zu sagen, ob es eine benutzerdefinierte Klasse ist, die ich selbst erstellt habe, genauso wie diese andere benutzerdefinierte Klasse, die ich erstellt habe.
Swift weiß einfach nicht, wie man sie vergleicht, was sie gleich macht.
Der einfachste Weg, um das zu erreichen, was Sie wollen, wäre ein benutzerdefiniertes Protokoll/Interface zu definieren, das die generische Version der Klassen repräsentiert, die Sie in dieser Anwendung verwenden werden und dann sicherstellen, dass jede davon konform und auch gleich ist. Dann sollten Sie in der Lage sein, etwas zu tun:
var objs = Array<MyAppClassesProtocol>()
und auch remove(element:)
Seit Swift 3 verwenden Sie AnyHashable
als Ersatz für AnyObject
nutzen könnten. Es stellt jeden Wert dar, der dem Protokoll Equatable
entspricht.
Statt
var array:[AnyObject] = []
schreiben gerade
var array:[AnyHashable] = []
- 1. Fehler: nicht konform mit dem Protokoll 'Equatable'
- 2. Swift-Code anpassen, um mit Swift zu arbeiten 3
- 3. Machen Sie IFormFile Funktion, um mit Modell zu arbeiten
- 4. Swift minimale Implementierung für Typen konform mit Protokollen mit Standardimplementierungen
- 5. Warum entspricht Array nicht Equatable, wenn seine Elemente in Swift equatable sind?
- 6. Wie man eine generische enum Equatable in Swift?
- 7. Typ ‚Viewcontroller‘ nicht zu Protokoll ‚UIPickerViewDataSource‘ in Swift konform 8.2.1
- 8. Swift - Arbeiten mit Gradients
- 9. Wie MockWebServer zu arbeiten, um mit Proxy zu arbeiten
- 10. Arbeiten mit Frameworks in Swift
- 11. Index (von :) und Equatable Protokoll
- 12. Wie zu machen: render => nichts arbeiten
- 13. mysql_pconnect Alternative zu arbeiten, um
- 14. Eichhörnchen einrichten, um mit jenkins zu arbeiten
- 15. Boost installieren, um mit CodeBlocks zu arbeiten
- 16. mit Matplotlib, um ein Streudiagramm zu machen
- 17. Keine Regel, um Ziel zu machen - Arbeiten mit Ressourcen in Qt Creator
- 18. Problem, Dampf zu bekommen, um mit Xcode 8 beta 3 zu arbeiten
- 19. Swift 2 Protokollkonformität zu Protokollen hinzufügen
- 20. Export HTML-Website zu Scorm-konform
- 21. machen pySFML arbeiten unter Linux
- 22. Ankhsvn Fehler: Client zu alt, um mit Arbeitskopie zu arbeiten
- 23. Probleme, Backbone.Router zu bekommen, um mit coffeescript zu arbeiten
- 24. Text zu einem Array machen - Swift
- 25. Machen CSS-Sprite-Animation arbeiten
- 26. Kann nicht unterstütztInterfaceOrientationsForWindow mit Swift 1.2 arbeiten
- 27. Wie mit Fehlern in Swift 3 arbeiten?
- 28. gleichzusetzen Umsetzung scheint nicht mit Generika arbeiten
- 29. Wie man benutzerdefinierte Tastatur arbeiten mit Swift
- 30. Swift roundf nicht mit float-Wert arbeiten
http://stackoverflow.com/questions/24938948/array-extension-to-remove-object-by-value anzeigen (es kann eigentlich ein Duplikat sein). – rmaddy
@rmaddy Nein, dies ist eine Frage, die spezifisch dafür ist, dass Erweiterungen des Compilers 'AnyClass' nicht zulassen, was es' AnyClass' unmöglich macht, sich an "Equatable" anzupassen, wie in dem von Ihnen angegebenen Thread –
verwendet Bevor Sie weitere Anstrengungen unternehmen, um dies zu erreichen, überlegen Sie, ob Sie einen gemeinsamen Nenner der betroffenen Klassen finden können, zum Beispiel ein Protokoll. Diese Art von * AnyClass/AnyObject gefälschten Generika * ist schlimmer als die Suche nach einem gemeinsamen Nenner. – vadian