I dagens veiledning lærer du om kategorier og hvordan du bruker dem til å utvide funksjonaliteten til kakao-touch-klasser. Dette er vår siste avdrag i Learn Objective-C-serien, så du får også en rask oversikt over hva vi har dekket så langt, og så se hva du kan gjøre for å fremme dine ferdigheter som et mål-C eller iPhone applikasjonsutvikler.
Så hva er kategorier? Mange Objektiv-C opplæringsprogrammer og serier vil overse kategorier, noe som er synd fordi de er så nyttige språkfunksjoner som er utrolig nyttige. Kategorier bidrar til å holde koden ren og mindre rotete ved å eliminere behovet for unødvendig underklasse. Fra det vi har lært så langt, hvis vi hadde et NSString-objekt som vi ønsket å legge til funksjonalitet for å gjøre noe, legger du til en metode som erstatter alle 'a' tegnene med en '4' (ubrukelig jeg vet, men for eksempel bare for formål), da kunne vi subclass NSString og legge til metoden selv. Vi så også denne typen underklasse når vi laget vår bilklasse, jeg spurte deg på slutten av den opplæringen om å lage en underklasse av bil, slik at du kunne legge til funksjonalitet i grunnklassen. Subclassing er en god tilnærming, og jeg på ingen måte forteller deg å stoppe underklasse, men i visse situasjoner gir kategorier bedre en måte å legge til litt ekstra funksjonalitet i en klasse.
Kategorier tillater oss å legge til metoder i en eksisterende klasse, slik at alle forekomster av denne klassen i søknaden din får din funksjonalitet. For eksempel, si at vi har 100 NSString-objekter i appen din, men du vil gjerne lage en egendefinert underklasse slik at hver NSString har en ekstra metode (reversString for eksempel). Med kategorier kan vi bare legge til metoden i en kategori, og alle tilfeller vil få lov til å bruke den nye metoden. Syntaxen er åpenbart litt forskjellig fra underklasse, og kategoriene tillater ikke å bruke forekommende variabler. Det er imidlertid mulig å overskrive en metode som allerede er på plass, men dette bør gjøres med forsiktighet, og bare hvis det er nødvendig, er det nødvendig.
Kategorier følger det samme syntaksoppsettet som en klasse, som i de har en implementering og et grensesnitt. Grensesnittet ser slik ut:
@interface ClassNameHere (kategori) // metoden deklarasjon (er) @end Implementeringen ser slik ut; @implementation ClassNameHere (category) // metode implementering (e) @end
Enkelt, ikke sant? Så la oss se på et eksempel. Vi skal lage en enkel metode som vil reversere en streng. Mens denne metoden er praktisk talt ubrukelig; Det er ikke hva metoden gjør som er viktig. Du bør allerede vite hvordan grensesnittet vil se ut, men her er det allikevel:
@interface NSString (omvendt) - (NSString *) reverseString; @slutt
Nå for å lage vår implementering:
@implementation NSString (omvendt) - (NSString *) reverseString @end
Deretter må vi legge til litt enkel kode for å vri snoren rundt. Siden vi legger til metoder i NSString-klassen, refererer vi strengen ved bruk av selvtillit. Nå for å reversere strengen trenger vi et nytt, midlertidig strengobjekt for å holde den omvendte strengen. Måten vi vil reversere strengen på er å bare gå gjennom den eksisterende strengen i omvendt, hver gang vi finner et nytt tegn, legger vi det til det omvendte strengenobjektet. Koden for dette er:
int lengde = [selvlengde]; NSMutableString * reversedString; reversedString = [[NSMutableString alloker] initWithCapacity: lengde]; mens (lengde> 0) [reversedString appendString: [NSString stringWithFormat: @ "% C", [egen karakterAtIndex: - lengde]]]; returnere [reversedString autorelease];
Denne metoden er ganske enkel, vi går gjennom en gang for hvert tegn i strengen. Vi legger til det nåværende tegnet ved hjelp av stringWithFormat og karakteren (C) -identifikatoren. Når vi kaller - lengde vi ikke bare returnerer lengde heltallet, trekker vi også av det, som er hvordan vår sløyfe beveger seg langs strengen.
Hvis alt har gått bra, må alle NSStrings allerede i vårt prosjekt holde seg til vår nye kategori. Nå kan du se hvorfor kategorier er så nyttige!
Ok, nå skal alle våre NSString-objekter ha vår ReverseString-metode. Bare for å gjenoppta, bør vår kode se slik ut:
@interface NSString (omvendt) - (NSString *) reverseString; @end @implementation NSString (omvendt) - (NSString *) reversString int lengde = [selvlengde]; NSMutableString * reversedString; reversedString = [[NSMutableString alloker] initWithCapacity: lengde]; mens (lengde> 0) [reversedString appendString: [NSString stringWithFormat: @ "% C", [egen karakterAtIndex: - lengde]]]; returnere [reversedString autorelease]; @slutt
Hver blokk med kode (grensesnitt og implementering) skal være i egne respektive filer etter konvensjon. Men vi heter kategorier litt annerledes. De to filene vi har opprettet, heter: NSString + reverse.h
(grensesnitt) og NSString + reverse.m
(gjennomføring).
Dette er en typisk navngivningskonvensjon etter mønsteret til navnet på klassen vi legger til en kategori til, et plustegn og navnet på vår kategori. Før vi fortsetter, husk at vi fortsatt må inkludere vår headerfil i hovedprosjektet. Så nå må vår kode se slik ut:
NSString * testString = @ "Bare en test"; [testString reverseString]; NSLog (@ "Reversed: '% @'", testString);
Hvis alt gikk etter planen, bør konsollen logge en reversert versjon av "Bare en test"!
Hvis alt ikke går i henhold til planen, må du kontrollere at du har kopiert koden for reverseString riktig og sørg for at du inkluderer headerfilen (* .h) for kategorien i hovedkodefilen din.
Som du kan se, er kategorier virkelig ganske nyttige (spesielt med strenger). De har et bredt spekter av bruksområder i et hvilket som helst prosjekt, en vanlig jeg bruker er validering. På denne måten kan jeg beholde all validering på ett sted og ikke trenger å bruke kompliserte underklasser.
Ikke bare er dette slutten av dagens tutorial, dette er slutten av serien på grunnleggende målene for Objective-C. I løpet av de siste tutorialene har vi dekket følgende emner:
Jeg håper du har hatt glede av denne serien, og hvis du bare har lest en eller to av opplæringene så langt, oppfordrer jeg deg til å begynne på dag 1 og lese en veiledning om dagen. Ved slutten av serien bør du være trygg nok til å begynne å skrive din egen kode på bare en uke!
Hvis du har spørsmål om serien eller eksemplene som vises, eller hvis du vil ha en ekstra opplæring på et annet område med Objective-C programmering, er du velkommen til å legge igjen en kommentar nedenfor.
Hvis du har spørsmål om Objective-C selv, et prosjekt du jobber med eller bare noen tekniske råd, ikke nøl med å gi meg en omtale eller direkte melding på Twitter eller besøk min nettside og finn veien til Kontakt skjema!
Nå som vi er ferdige, er utfordringene uendelige. Jeg foreslår sterkt at du legger penn til papir og bestemmer deg for en første app for å bygge fra start til skrape. Kom opp med en idé og et design, og bruk alle prinsippene du har lært av denne serien, og la oss få vite hva du kommer med!
Takk for at du leste!