text: swift — Können Sie die Erweiterungen in Swift außer Kraft setzen oder nicht? (Compiler scheint verwirrt!)
  /Können Sie die Erweiterungen in Swift außer Kraft setzen oder nicht? (Compiler scheint verwirrt!)
  Können Sie die Erweiterungen in Swift außer Kraft setzen oder nicht? (Compiler scheint verwirrt!)
  Ich habe in Swift an einer iOS-Anwendung gearbeitet (die meisten davon wurden von Objective-C verschoben). Ich verwende Core Data und versuche, Erweiterungen zu verwenden, um Klassen, die automatisch aus meinem Modell generiert wurden, mit Funktionen zu erweitern. In Objective-C habe ich ohne weiteres eine Methode in einer Kategorie der Klasse A hinzugefügt und diese Methode in einer Kategorie der Klasse B (die von A stammt) überschreiben können, und ich hatte gehofft, dasselbe in Swift zu tun.
  Seit einiger Zeit habe ich den folgenden Code in meinem Projekt (und das ist nur ein Beispiel), und obwohl ich die Funktionalität noch nicht verwendet habe, hat der Compiler beim Kompilieren dieses Codes gut funktioniert:
  Ich hoffe, dass ein freundlicher Swift-Experte bereits mein Problem sieht, aber hier habe ich herausgefunden, wie ich es herausgefunden habe: Kürzlich habe ich versucht, eine ähnliche Funktionalität hinzuzufügen, indem Methoden verwendet werden, die Parameter und/oder Rückgabewerte enthalten, die nicht in Typen eingebaut sind Fehler: Deklarationen in Erweiterungen können noch nicht überschrieben werden.
  Um dieses Problem zu untersuchen, fügte ich einer meiner Swift-Dateien Folgendes hinzu und dachte, es würde sich gut kompilieren lassen:
  Zu meiner Überraschung erhielt ich den gleichen Compiler-Fehler (Deklarationen in Erweiterungen können noch nicht überschrieben werden). Was? Aber ich habe dieses Muster schon mehrmals ohne Compilerfehler verwendet.
  Fragen: Gibt es bestimmte Regeln für das Überschreiben in Erweiterungen, so dass sie in einigen Fällen funktionieren sollten, in anderen Fällen jedoch nicht? Zweitens (und beunruhigender) warum scheint der Swift-Compiler so inkonsistent zu sein? Was fehlt mir hier? Bitte hilf mir, meinen Glauben an Swift wiederherzustellen.
  Wie in der richtigen Antwort von Martin R angegeben, scheint es, als könnten Sie Methoden in der aktuellen Version von Swift (1.1 über Xcode 6.1) überschreiben, sofern (1) nur von NSObject abgeleitete Klassen verwendet werden und (2) das Inout nicht verwenden Modifikator. Hier einige Beispiele:
  swiftoverrideswift-extensions
  24.11.2014 FTLPhysicsGuy
  Es scheint, dass das Überschreiben von Methoden und Eigenschaften in einer Erweiterung mit den aktuellen Swift (Swift 1.1/Xcode 6.1) nur für Objective-C-kompatible .
  Wenn eine Klasse von NSObject abgeleitet ist, sind alle ihre Mitglieder automatisch verfügbarin Objective-C (wenn möglich, siehe unten). Also mit
  ihr Beispielcode wird kompiliert und funktioniert wie erwartet. Ihre Codedatenerweiterung überschreibtwork, da NSManagedObject eine Unterklasse von NSObject ist.
  Alternativ können Sie das @objc-Attribut für eine Methode oder Eigenschaft verwenden:
  Methoden, die in Objective-C nicht darstellbar sind, können nicht mit @objc Markiert und in einer Unterklassenerweiterung nicht überschrieben werden. Dies gilt beispielsweise für Methoden mit inout-Parametern oder Parametern eines enum-Typs.
  24.11.2014 Martin R
  Ich habe das auf Xcode9 erlebt. Xcode zu schließen und wieder zu öffnen, hat für mich funktioniert. Wahrscheinlich ein Fehler im Compiler.