Ich habe die Swift-Dokumentation gelesen und hier gesucht, bin mir aber immer noch nicht sicher, wie eine Klassenhierarchie implementiert werden soll, in der jede Unterklasse einen benutzerdefinierten Wert für eine geerbte statische Eigenschaft festlegt; das heißt:Verwirrung in Bezug auf das Überschreiben von Klasseneigenschaften in Swift
- Basisklasse definiert eine statische Eigenschaft: alle Instanzen teilen den gleichen Wert.
- Unterklasse überschreibt die statische Eigenschaft: Alle Instanzen haben den gleichen Wert , der sich von dem der Basisklasse unterscheidet.
Kann die Eigenschaft gespeichert werden?
Wie sollte ich auf den Wert der Eigenschaft innerhalb einer Instanzmethode (unabhängig von der bestimmten Klasse) zugreifen und immer den richtigen Wert erhalten? Funktioniert der folgende Code?
class BaseClass
{
// To be overridden by subclasses:
static var myStaticProperty = "Hello"
func useTheStaticProperty()
{
// Should yield the value of the overridden property
// when executed on instances of a subclass:
let propertyValue = self.dynamicType.myStaticProperty
// (do something with the value)
}
Dank. Wenn also die Klassenvariable ein großes Wörterbuch enthält, das aus einer Datei gelesen wird (die ich mir nicht jedes Mal berechnen lassen kann), muss ich eine separate private gespeicherte statische Variable für jede Unterklasse einrichten und dort mein Wörterbuch speichern , und geben Sie ihren Wert in der überschriebenen (berechneten) Klasse zurück, richtig? –
@NicolasMiari Eine Möglichkeit zur Umgehung der _ "Klassenvariablen können keine gespeicherten Eigenschaften sein" _ Einschränkung besteht darin, jede Klasse in eine eigene Datei _ zu setzen (was Sie normalerweise tun) _ und dann einen gespeicherten Dateibereich zu erstellen- Eigenschaft var, um die Klasse compressed-property var wie folgt zurückzulehnen: 'file private static var _thingStorage: String'. Dann wird Ihre berechnete Eigenschaft in Ihrer Klasse zu "override class var thing: String {return _thingStorage}". –