Ich bin neu in Obj-C also vergib mir, wenn das eine dumme Frage ist:Java-enum Stilklassen in Objective-C?
Wie implementiere ich etwas im Stil von Javas enums? Oder um genauer zu sein:
Ich möchte eine Klasse mit einigen bekannten Eigenschaften, die zur Kompilierzeit fest und einzigartig pro Instanz sind. Zusätzlich möchte ich nur einen Instanztyp.
Lassen Sie mich ein Beispiel in Java geben:
public enum MessageTypes {
DEFAULT("white", "standard", 1),
EXPRESS("red", "expressMessage", 2),
BORADCAST("green", "broadcast", 3);
String color; String tagName; int dbId;
MessageTypes(String color, String tagName, int dbId) {
// you get the idea
}
//some methonds like getEnumByTagName
}
Wie würden Sie so etwas wie dies in Objective-C tun? Fehle ich etwas? Ist das überhaupt ein schlechtes Muster?
Vielen Dank im Voraus!
EDIT: Es tut mir leid, wenn ich mich nicht klar gemacht habe. Ich weiß, dass obj-c enums nicht das sind, was ich suche (da sie nur marginal mehr sind als ein typedef zu einem int).
Ich möchte eine Reihe von (Art-of-Singleton, unveränderlich) Instanzen einer bestimmten Klasse erstellen. Das Singleton-Muster in Apples Dev-Docs ist nutzlos, da ich mehrere unterschiedliche Instanzen einer Klasse mit jeweils individuellen Werten in ihren Eigenschaften haben möchte.
Ziel ist es, mehrere Nachrichtentypen (ca. 20) zu haben, die einer Nachricht als Eigenschaft zugewiesen werden können. Jeder meiner Nachrichtentypen hat eine (fixe und vordefinierte) Farbe, einen Attributwert (in einer XML-Darstellung) und eine numerische ID.
In Java würde ich eine enum wie in meinem Codebeispiel verwenden. Aber wie erstelle ich verschiedene MessageTypes und verknüpfe sie mit ihren Eigenschaften in Obj-C?
Das Erstellen von 20 Subtcases von MessageType (jede mit einer Singleton-Instanz, die die Eigenschaften enthält) scheint für eine so einfache Aufgabe und einen totalen Overkill viel Arbeit zu sein.
Meine aktuelle Vorgehensweise besteht darin, eine Klasse mit einem NSArray zu erstellen, das die verschiedenen Instanzen enthält. Beim ersten Zugriff einer Methode wie +(id)messageTypeForId:NSInteger id_
ist das NSArray vorbelegt. Aber das fühlt sich total tollpatschig an und überhaupt nicht elegant ...
Gibt es einen befriedigenderen Ansatz?
Das Makro ist meiner Meinung nach hässlicher, aber ich mag deine erste Lösung. Das scheint besser (und kakaoartiger) zu sein als mein Ansatz. Vielen Dank. –
Ich sehe, wie 'default' und' shared' per Konvention in einigen Klassen verwendet werden, gibt es andere andere Präfixe wie diese? – zekel
In Ihrer ersten Lösung, warum überprüfen Sie, ob thisMessageType vor dem Aufrufen von Allo nil ist? Wird es nicht immer Null wegen der vorhergehenden Zeile sein? Danke für die Hilfe eines Neulings. –