Objective-C Literals

Denna handledning kommer att lära dig hur du programmerar mer effektivt med hjälp av objektstavlar!


Literals & Literal Expressions

Vid programmering, a bokstavlig är helt enkelt ett fast värde som en programmerare går in i en källkodsfil. Några exempel från C inkluderar:

 int år = 2012; char initial = 'M';

I ovanstående är "2012" en int bokstavlig och 'M' är a röding bokstavlig.

Datorforskare hänvisar också ibland till bokstavliga uttryck. En uttryck är helt enkelt en grupp värderingar och operatörer som returnerar ett nytt värde, till exempel "2 * pi * r". Ett bokstavligt uttryck är ett uttryck som bara innehåller bokstavliga värden, som "2 * 3,14 * 10".

Följande kodsekvens visar hur variabler kan skapas och tilldelas med bokstavliga uttryck i C:

 int resultat = 15/5; // Det bokstavliga uttrycket "15/5" ger 3 dubbel = 5/2; // Det bokstavliga uttrycket "5/2" ger 2,5

Eftersom Objective-C är en superset av C, är alla kodlinjer som visas i C hittills giltiga Objective-C-syntax. Emellertid har alla de litteratur som demonstrerats också varit för primitiva datatyper. En mer intressant användning av bokstäver är att tillämpa dem på föremål.

Följande är ett exempel på en objekt bokstavligt:

 NSString * siteTitle = @ "Mobiletuts +";

I ovanstående kodrad, @ "Mobiletuts +" är ett objekt som är bokstavligt som används för att representera ett strängobjekt. Utan användning av ett objekt bokstavligt, skulle den ovanstående raden av kod behöva skrivas mycket annorlunda, kanske så här:

 NSString * siteTitle = [NSString stringWithUTF8String: "Mobiletuts"];

Som du kan se är objektets bokstavliga syntax mycket mer koncis och läsbar.

Med utgåvan av Apple LLVM Compiler 4.0 har ytterligare objekt bokstavligt stöd lagts till för NSNumber objekt, array objekt och ordbok objekt.


NSNumber Literals

NSNumber objekt kan nu representeras med objekt litteratur.

Följande kodfel illustrerar den traditionella stilen:

 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];

Genom att använda objektstavler kan ovanstående skrivas om som enkelt:

 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;

Objective-C Collection Literals

Samlingsbokstäver är ett otroligt användbart tillägg till Objective-C. Den nya LLVM-kompilatorn ger möjlighet att skapa samlingslitteraler för både arrays och ordböcker, men inte uppsättningar.

NSArray Literals

Den gamla syntaxen för att skapa en NSArray:

 NSArray * instruments = [NSArray arrayWithObjects: @ "Ocarina", @ "Flute", @ "Harp", noll];

Den nya objektobjekten för att skapa en NSArray:

 NSArray * instrument = @ [@ "Ocarina", @ "Flute", @ "Harp"];

Tyvärr fungerar inte ovanstående syntax för att deklarera en NSMutableArray, men det finns ett litet arbete runt. Passera bara mutableCopy meddelande till det nybildade objektet:

 NSMutableArray * instrumentsMutable = [@ [@ "Ocarina", @ "Flute", @ "Harp"] mutableCopy];

Ordbok litteratur

Den traditionella metoden för att skapa en ordlista med Objective-C ser något ut så här:

 NSArray * nycklar = [NSArray arrayWithObjects: @ "Character", @ "Weapon", @ "Hitpoints", noll]; NSArray * objekt = [NSArray arrayWithObjects: @ "Zelda", @ "Sword", [NSNumber numberWithInt: 50], nil]; NSDictionary * stats = [NSDictionary dictionaryWithObjects: objects forKeys: keys];

Eller något mindre ordentligt alternativ:

 NSDictionary * stats = [NSDictionary dictionaryWithObjectsAndKeys: @ "Zelda", @ "Character", @ "Sword", @ "Weapon", [NSNumber numberWithInt: 50], @ "Hitpoints", nil];

Båda ovanstående är främsta exempel på varför Objective-C har utvecklat ett dåligt rykte för att vara överdriven. Inte mer! Med objekt litteratur kan ovanstående kod skrivas om som enkelt:

 NSDictionary * stats = @ @ "Tecken": @ "Zelda", @ "Vapen": @ "Sword", @ "Hitpoints": @ 50;

Detta är mycket lättare att både förstå och skriva.

Samling Subscripting

Förutom att kunna skapa samlingar med objektbokstäver har den senaste LLVM Compiler också infört stöd för att få tillgång till array- eller ordboksvärden med prenumerationer.

Det här är till exempel den traditionella formen som används för att komma åt ett objekt från en array eller en ordbok:

 NSString * instrument = [instrument objectAtIndex: 0]; // Returnerar 'Ocarina' NSString * namn = [statistik objectForKey: @ "Character"]; // Returnerar 'Zelda'

Med den nya prenumerationsfunktionen kan du bara göra det här:

 NSString * instrument = instrument [0]; // Returnerar 'Ocarina' NSString * namn = statistik [@ "Character"]; // Returnerar 'Zelda'

Ännu bättre är insamlingsabonnemang inte bara begränsat till att välja objekt. Om samlingen är mutabel kan du också omdirigera värden:

 instrumentsMutable [0] = @ "Ocarina of Time"; statsMutable [@ "Weapon"] = @ "Hammer";

Detta är ett enormt steg framåt för målare-C-programmerare, och jag tror att det kommer att göra språket mer tillgängligt för de som övergår från andra språk som Java eller C ++.


Boxed Expressions

Det sista ämnet som är värt att nämna i denna handledning är begreppet "Boxed Expressions". I huvudsak stöder Objective-C nu att konvertera resultatet av ett C-stiluttryck till ett objektiv-C-objekt. Den grundläggande syntaxen för detta är som så:

 @ (2 * pi * r)

Resultatet av ovanstående skulle vara en NSNumber objekt som innehöll produkten av 2 gånger värdet av pi gånger värdet av r. Vi kunde givetvis omedelbart tilldela den produkten till en NSNumber-variabel:

 NSNumber * diameter = @ (2 * pi * r);

Denna teknik kommer också att fungera med enummar och strängar:

 // Boxed Expressions med Enums typedef enum Sword, Hammer, Shield, Arrow Vapen; NSNumber * currentWeapon = @ (Sword); // Returnerar 0 // Boxed Expressions med char * NSString * login = @ (getlogin ()); // Returnerar inloggningsnamn // Resultat NSLog (@ "Vapen:% @ \ nLogin:% @", currentWeapon, login);

Sammanfatta

Denna handledning har gett dig en snabb översikt över objektet litteratur, en ny teknik som introducerades med Apple LLVM Compiler 4.0. För mer ingående täckning av detta ämne, se den officiella LLVM-dokumentationen.

Jag hoppas att du njöt av att läsa den här handledningen. Lämna gärna feedback som du har i kommentarfältet nedan. Du kan också ansluta mig till Twitter eller Google Plus. Skål!