In diesem Lernprogramm erfahren Sie, wie Sie mit Objektliteralen effizienter programmieren können!
In der Programmierung a wörtlich ist einfach ein fester Wert, den ein Programmierer in eine Quellcodedatei eingibt. Einige Beispiele aus C sind:
int Jahr = 2012; char initial = 'M';
Im obigen ist '2012' ein int
wörtlich und "M" ist ein verkohlen
wörtlich.
Manchmal beziehen sich auch Informatiker darauf wörtliche Ausdrücke. Ein Ausdruck ist einfach eine Gruppe von Werten und Operatoren, die einen neuen Wert zurückgeben, z. B. "2 * pi * r". Ein Literalausdruck ist ein Ausdruck, der nur Literalwerte enthält, z. B. "2 * 3.14 * 10"..
Das folgende Code-Snippet veranschaulicht, wie Variablen erstellt und zugewiesen werden können wörtliche Ausdrücke in C:
int Ergebnis = 15/5; // Der wörtliche Ausdruck "15/5" ergibt 3 double = 5/2; // Der wörtliche Ausdruck "5/2" ergibt 2,5
Da Objective-C eine Obermenge von C ist, sind alle bisher in C demonstrierten Codezeilen auch eine gültige Objective-C-Syntax. Alle dargestellten Literale waren jedoch auch für primitive Datentypen. Eine interessantere Verwendung von Literalen besteht darin, sie auf Objekte anzuwenden.
Das Folgende ist ein Beispiel für eine Objektliteral:
NSString * siteTitle = @ "Mobiletuts +";
In der obigen Codezeile, @ "Mobiletuts +"
ist ein Objektliteral, das zur Darstellung eines Zeichenkettenobjekts verwendet wird. Ohne die Verwendung eines Objektliteral müsste die obige Codezeile sehr unterschiedlich geschrieben werden, vielleicht wie folgt:
NSString * siteTitle = [NSString stringWithUTF8String: "Mobiletuts"];
Wie Sie sehen, ist die Objekt-Literal-Syntax viel übersichtlicher und lesbarer.
Mit der Veröffentlichung des Apple LLVM Compiler 4.0 wurde die zusätzliche Unterstützung für Objektliteral hinzugefügt NSNumber
Objekte, Array-Objekte und Dictionary-Objekte.
NSNumber
Objekte können jetzt mit Objektliteralen dargestellt werden.
Der folgende Codeausschnitt veranschaulicht den traditionellen Stil:
NSNumber * boolYES = [NSNumber numberWithBool: YES]; NSNumber * boolNO = [NSNumber numberWithBool: NO]; NSNumber * charX = [NSNumber numberWithChar: 'X']; NSNumber * fortySevenInt = [NSNumber numberWithInt: 47]; NSNumber * fortySevenUnsigned = [NSNumber numberWithUnsignedInt: 47U]; NSNumber * fortySevenLong = [NSNumber numberWithLong: 47L]; NSNumber * goldenRatioFloat = [NSNumber numberWithFloat: 1.61803F]; NSNumber * goldenRatioDouble = [NSNumber numberWithDouble: 1.61803];
Mit Objektliteralen kann das Obige einfach umgeschrieben werden:
NSNumber * boolYES = @YES; NSNumber * boolNO = @NO; NSNumber * charX = @ 'X'; NSNumber * fortySevenInt = @ 47; NSNumber * fortySevenUnsigned = @ 47U; NSNumber * fortySevenLong = @ 47L; NSNumber * goldenRatioFloat = @ 1.61803F; NSNumber * goldenRatioDouble = @ 1.61803;
Sammlungsliterale sind eine unglaublich nützliche Ergänzung zu Objective-C. Der neue LLVM-Compiler bietet die Möglichkeit, Sammlungsliterale für Arrays und Wörterbücher zu erstellen, jedoch nicht für Sets.
Die alte Syntax zum Erstellen eines NSArray
:
NSArray * instruments = [NSArray arrayWithObjects: @ "Ocarina", @ "Flöte", @ "Harp", nil];
Die neue Objektliteral-Syntax zum Erstellen eines NSArray
:
NSArray * instruments = @ [@ "Ocarina", @ "Flöte", @ "Harp"];
Leider funktioniert die obige Syntax nicht zum Deklarieren von NSMutableArray
, aber es ist leicht zu umgehen. Pass einfach die mutableCopy
Nachricht an das neu gebildete Objekt:
NSMutableArray * instrumentsMutable = [@ [@ "Ocarina", @ "Flöte", @ "Harp"] mutableCopy];
Die traditionelle Methode zum Erstellen eines Wörterbuchs mit Objective-C sieht in etwa so aus:
NSArray * keys = [NSArray arrayWithObjects: @ "Zeichen", @ "Waffe", @ "Hitpoints", nil]; NSArray * objects = [NSArray arrayWithObjects: @ "Zelda", @ "Sword", [NSNumber numberWithInt: 50], nil]; NSDictionary * stats = [NSDictionary dictionaryWithObjects: objects forKeys: keys];
Oder eine etwas weniger ausführliche Alternative:
NSDictionary * stats = [NSDictionary dictionaryWithObjectsAndKeys: @ "Zelda", @ "Character", @ "Sword", @ "Waffe", [NSNumber numberWithInt: 50], @ "Hitpoints", nil];
Beide oben genannten Beispiele sind ein gutes Beispiel dafür, warum Objective-C sich einen schlechten Ruf erworben hat, übermäßig wortreich zu sein. Nicht mehr! Bei Objektliteralen kann der obige Code einfach umgeschrieben werden:
NSDictionary * stats = @ @ "Character": @ "Zelda", @ "Waffe": @ "Sword", @ "Hitpoints": @ 50;
Das ist viel einfacher zu verstehen und zu schreiben.
Der neuste LLVM-Compiler kann nicht nur Sammlungen mit Objektliteralen erstellen, sondern unterstützt auch den Zugriff auf Array- oder Wörterbuchwerte mit Subskripten.
Dies ist beispielsweise das traditionelle Formular, das für den Zugriff auf ein Objekt aus einem Array oder Wörterbuch verwendet wird:
NSString * instrument = [instruments objectAtIndex: 0]; // Liefert 'Ocarina' NSString * name = [stats objectForKey: @ "Character"]; // gibt 'Zelda' zurück
Mit der neuen Subskriptionsfunktion können Sie Folgendes tun:
NSString * instrument = instruments [0]; // Gibt 'Ocarina' NSString * name = stats [@ "Character"] zurück; // gibt 'Zelda' zurück
Besser noch, Sammlungsskripte beschränken sich nicht nur auf die Auswahl von Objekten. Wenn die Sammlung veränderbar ist, können Sie auch Werte neu zuweisen:
instrumentsMutable [0] = @ "Okarina of Time"; statsMutable [@ "Waffe"] = @ "Hammer";
Dies ist ein großer Schritt nach vorn für Objective-C-Programmierer, und ich denke, dadurch wird die Sprache auch für diejenigen zugänglich, die von anderen Sprachen wie Java oder C ++ wechseln.
Das abschließende Thema in diesem Tutorial ist das Konzept von "Boxed Expressions". Im Wesentlichen unterstützt Objective-C jetzt die Umwandlung des Ergebnisses eines C-Ausdrucks in ein Objective-C-Objekt. Die grundlegende Syntax dafür ist wie folgt:
@ (2 * pi * r)
Das Ergebnis der obigen Ausführungen wäre ein NSNumber
Objekt, das das Produkt des 2-fachen des Wertes von pi des Wertes von r enthält. Wir können dieses Produkt natürlich sofort einer NSNumber-Variablen zuordnen:
NSNumber * Durchmesser = @ (2 * pi * r);
Diese Technik funktioniert auch mit Enums und Strings:
// Boxed Expressions with Enums typedef enum Schwert, Hammer, Schild, Pfeil Waffen; NSNumber * currentWeapon = @ (Schwert); // Gibt 0 zurück // Boxed Expressions with char * NSString * login = @ (getlogin ()); // Gibt den Anmeldenamen zurück // Results NSLog (@ "Waffe:% @ \ nLogin:% @", currentWeapon, login);
Dieses Tutorial bietet Ihnen einen schnellen Überblick über Objektliterale, eine neue Technik, die mit dem Apple LLVM Compiler 4.0 eingeführt wurde. Ausführlichere Informationen zu diesem Thema finden Sie in der offiziellen LLVM-Dokumentation.
Ich hoffe, Sie haben dieses Tutorial gelesen. Fühlen Sie sich frei, Feedback zu hinterlassen, das Sie unten in den Kommentaren haben. Sie können sich auch über Twitter oder Google Plus mit mir verbinden. Prost!