Kategorier gir muligheten til å legge til funksjonalitet til et objekt uten underklassering eller endring av det aktuelle objektet. Et praktisk verktøy, de brukes ofte til å legge til metoder til eksisterende klasser, for eksempel NSString
eller dine egne egendefinerte objekter.
Start Xcode og klikk på File> New> Project. Velg et iOS Single View-program fra vinduet og klikk på "Neste". Gi produktet navn "Kategorier" og skriv inn et navn for firmaidentifikatoren, for eksempel "com.companyName.categories." Velg iPhone-enheten, og klikk på "Neste". Velg et sted for å lagre prosjektet ditt og klikk "Opprett".
Nå som prosjektet ditt er satt opp, la oss lage en kategori som legger til ekstra funksjonalitet til NSString
klasse. Klikk på File> New> File, og velg en kakaobryt objektiv-C kategori fra vinduet. Klikk på "Neste". Navngi kategorien "RemoveNums" og velg NSString
fra rullegardinmenyen "Kategori på" (du må kanskje skrive dette inn manuelt). Klikk på "Next" etterfulgt av "Create."
Tilbake i Xcode-prosjektet ditt, klikk på "NSString + RemoveNums.h" for å se den nye kategorien headerfilen. Legg til følgende kode i grensesnittet for å erklære metoden.
@interface NSString (RemoveNums) - (NSString *) removeNumbersFromString: (NSString *) streng; @slutt
Klikk "NSString + RemoveNums.m" for å se kategoriens implementasjonsfil. Legg til følgende kode for å lage en metode som fjerner alle tallene fra en NSString
. Først definerer vi en NSCharacterSet
av tallene null til ni som vi skal bruke som referanse til å sammenligne med den opprinnelige innspillstrengen. I dette tilfellet vil den opprinnelige strengen "ABC 123" få tallene "123" fjernet fra strengen fordi kategorimetoden bruker NSString
metode stringByTrimmingCharactersInSet:
.
- (NSString *) removeNumbersFromString: (NSString *) streng NSString * trimmedString = nil; NSCharacterSet * numbersSet = [NSCharacterSet characterSetWithCharactersInString: @ "0123456789"]; trimmedString = [streng strengByTrimmingCharactersInSet: numbersSet]; return trimmedString;
Klikk "ViewController.h" og importer kategorien ved å legge til følgende kode.
#import "NSString + RemoveNums.h"
Klikk "ViewController.m" og legg til følgende kode i viewDidLoad
metode. Den lokale variabelen stringWithNums
inneholder en kombinasjon av bokstaver og tall. Neste linje tar strengvariabelen og kjører den gjennom kategorimetoden removeNumbersFromString
. Endelig, NSLog
sender ut den returnerte verdien av den nylig beskrevne strengen uten noen tall.
NSString * stringWithNums = @ "ABC 123"; NSLog (@ "stringWithNums ->% @", stringWithNums); stringWithNums = [stringWithNums removeNumbersFromString: stringWithNums]; NSLog (@ "trimmed stringWithNums ->% @", stringWithNums);
Klikk på Produkt> Kjør, eller klikk pilen "Kjør" øverst til venstre for å teste koden. Legg merke til at konsollen viser den opprinnelige inntastingsstrengen, "ABC 123", så vel som strengen etter at den har blitt endret etter kategorimetoden og tallene er fjernet.
Subclassing er en måte å legge til funksjonalitet til et objekt, men unngår unødvendig underklasse med en kategori vil bidra til å redusere mengden kode og holde prosjektene mer organisert. Det er en rekke scenarier hvor bruk av en kategori er gunstig. Del dine kategoriscenarier i kommentarene nedenfor.