Ich habe eine Klasse, die Objekte basierend auf einem Enum-Wert erstellt. Daher basieren einige Eigenschaften dieser Objekte auf einem bestimmten Enum-Wert, einem Typ.Konstruieren von Objekten basierend auf enum
Option 1:
typedef NS_ENUM (NSUInteger, ViewType) {
VTHouse,
VTCar,
VTChair,
...
};
Ich habe mehrere Methoden, die Eigenschaften des Objekts bestimmen, von der Art basieren.
Dann habe ich eine Methode, die der Benutzer dieser Klasse aufrufen würde.
Das alles funktioniert sehr gut, aber es gibt mir ein unbehagliches Gefühl. Etwas fühlt sich einfach nicht richtig an. Vielleicht sind es alle Schalter. Ich habe das Gefühl, dass es einen saubereren Weg gibt, dies zu tun.
Eine andere Option, die die meisten Switches loswird, ist etwas wie;
Option 2:
- (SpecialView*)specialViewForType:(ViewType)type {
SpecialView *view = nil;
switch (type) {
case VTHouse: {
view = [self specialViewHouse];
break;
}
case VTCar: {
view = [self specialViewCar];
break;
}
case VTChair: {
view = [self specialViewChair];
break;
}
...
}
return view;
}
Wo jeder dieser Methoden bereits weiß, welche Eigenschaften für jeden Typ einzustellen. Aber ich bevorzuge Option 1.
Also meine Frage ist; Hat jemand irgendwelche Vorschläge, wie man diese Art von Code verbessern kann?
Sie könnten Switch Case mit Wörterbuch ersetzen und einfacher Lookup. Bestimmte Switch-Case-Regeln, die das gleiche Ergebnis erzeugen, können ebenfalls gruppiert werden. Wenn Sie über ein gemeinsames Protokoll für Sichten verfügen, können Sie in jeder der Unterklassen Farbe/auswählbare Logik implementieren, um einen Wechsel zu vermeiden. – Andy