Kategorier ger möjlighet att lägga till funktionalitet till ett objekt utan underklassificering eller ändra det aktuella objektet. Ett praktiskt verktyg används ofta för att lägga till metoder i befintliga klasser, t.ex. NSString
eller dina egna anpassade objekt.
Starta Xcode och klicka på Arkiv> Nytt> Projekt. Välj ett iOS Single View-program från fönstret och klicka på "Nästa". Namn på din produkt "Kategorier" och ange ett namn för din företagsidentifierare, till exempel "com.companyName.categories." Välj iPhone-enheten och klicka på "Nästa". Välj en plats för att lagra ditt projekt och klicka på "Skapa".
Nu när ditt projekt är upprättat, låt oss skapa en kategori som lägger till ytterligare funktionalitet till NSString
klass. Klicka på Arkiv> Nytt> Fil och välj en kategori Kakaoblandning-objektiv-C från fönstret. Klicka på "Nästa". Namnge din kategori "RemoveNums" och välj NSString
från rullgardinsmenyn "Kategori på" (du kan behöva skriva in manuellt). Klicka på "Next" följt av "Create."
Tillbaka i ditt Xcode-projekt klickar du på "NSString + RemoveNums.h" för att visa den nya kategorins huvudfiler. Lägg till följande kod i gränssnittet för att deklarera metoden.
@interface NSString (RemoveNums) - (NSString *) removeNumbersFromString: (NSString *) sträng; @slutet
Klicka på "NSString + RemoveNums.m" för att visa kategorins implementeringsfil. Lägg till följande kod för att skapa en metod som tar bort alla siffror från en NSString
. Först definierar vi en NSCharacterSet
av siffrorna noll till nio som vi ska använda som referens för att jämföra med den ursprungliga inmatningssträngen. I det här fallet kommer den ursprungliga strängen "ABC 123" att ha siffrorna "123" borttagen från strängen eftersom kategorinoden använder NSString
metod stringByTrimmingCharactersInSet:
.
- (NSString *) removeNumbersFromString: (NSString *) sträng NSString * trimmedString = nil; NSCharacterSet * numbersSet = [NSCharacterSet characterSetWithCharactersInString: @ "0123456789"]; trimmedString = [string stringByTrimmingCharactersInSet: numbersSet]; returnera trimmedString;
Klicka på "ViewController.h" och importera kategorin genom att lägga till följande kod.
#import "NSString + RemoveNums.h"
Klicka på "ViewController.m" och lägg till följande kod till viewDidLoad
metod. Den lokala variabeln stringWithNums
innehåller en kombination av bokstäver och siffror. Nästa rad tar strängvariabeln och kör den genom kategorimetoden removeNumbersFromString
. Till sist, NSLog
matar ut det returnerade värdet på den nyklippta strängen utan några siffror.
NSString * stringWithNums = @ "ABC 123"; NSLog (@ "stringWithNums ->% @", stringWithNums); stringWithNums = [stringWithNums removeNumbersFromString: stringWithNums]; NSLog (@ "trimmed stringWithNums ->% @", stringWithNums);
Klicka på Produkt> Kör eller klicka på "Kör" -pilen längst upp till vänster för att testa koden. Observera att konsolen visar den ursprungliga inmatningssträngen, "ABC 123", såväl som strängen efter att den har ändrats enligt kategorinoden och numren har tagits bort.
Subclassing är ett sätt att lägga till funktionalitet till ett objekt, men att undvika onödig underklassering med hjälp av en kategori kommer att minska antalet koden och hålla dina projekt mer organiserade. Det finns ett antal scenarier där användandet av en kategori är fördelaktig. Dela dina kategoriscenarier i kommentarerna nedan.