Categorieën bieden de mogelijkheid om functionaliteit aan een object toe te voegen zonder het werkelijke object te subclasseren of te wijzigen. Een handig hulpmiddel, ze worden vaak gebruikt om methoden toe te voegen aan bestaande klassen, zoals NSString
of uw eigen aangepaste objecten.
Start Xcode en klik op Bestand> Nieuw> Project. Kies een iOS Single View-toepassing uit het venster en klik op "Volgende". Geef uw product 'Categorieën' een naam en voer een naam in voor uw bedrijfsidentificatie, zoals 'com.companyName.categories'. Kies de iPhone-apparaatfamilie en klik op "Volgende". Kies een locatie om uw project op te slaan en klik op 'Maken'.
Nu uw project is ingesteld, kunnen we een categorie maken die extra functionaliteit toevoegt aan de NSString
klasse. Klik op Bestand> Nieuw> Bestand en kies een Cocoa Touch Objective-C categorie uit het venster. Klik volgende." Geef uw categorie de naam "RemoveNums" en selecteer NSString
uit het vervolgkeuzemenu "Categorie aan" (u moet dit mogelijk handmatig invoeren). Klik op "Volgende" gevolgd door "Maken".
Terug in uw Xcode-project, klik op "NSString + RemoveNums.h" om het header-bestand van de nieuwe categorie te bekijken. Voeg de volgende code toe aan de interface om de methode te declareren.
@interface NSString (RemoveNums) - (NSString *) removeNumbersFromString: (NSString *) string; @einde
Klik op "NSString + RemoveNums.m" om het implementatiebestand van de categorie te bekijken. Voeg de volgende code toe om een methode te maken waarmee alle nummers uit een worden verwijderd NSString
. Eerst definiëren we een NSCharacterSet
van de cijfers nul tot en met negen die we zullen gebruiken als een referentie om te vergelijken met de originele invoerreeks. In dit geval heeft de oorspronkelijke tekenreeks "ABC 123" de getallen "123" verwijderd uit de tekenreeks omdat de categoriemethode de NSString
methode stringByTrimmingCharactersInSet:
.
- (NSString *) removeNumbersFromString: (NSString *) string NSString * trimmedString = nil; NSCharacterSet * numbersSet = [NSCharacterSet characterSetWithCharactersInString: @ "0123456789"]; trimmedString = [string stringByTrimmingCharactersInSet: numbersSet]; return trimmedString;
Klik op "ViewController.h" en importeer de categorie door de volgende code toe te voegen.
#import "NSString + RemoveNums.h"
Klik op "ViewController.m" en voeg de volgende code toe aan de viewDidLoad
methode. De lokale variabele stringWithNums
bevat een combinatie van letters en cijfers. De volgende regel neemt de stringvariabele en voert deze door de categoriemethode removeNumbersFromString
. Tenslotte, NSLog
geeft de geretourneerde waarde van de nieuw getrimde reeks zonder enig nummer af.
NSString * stringWithNums = @ "ABC 123"; NSLog (@ "stringWithNums ->% @", stringWithNums); stringWithNums = [stringWithNums removeNumbersFromString: stringWithNums]; NSLog (@ "getrimd stringWithNums ->% @", stringWithNums);
Klik op Product> Uitvoeren of klik op de pijl "Uitvoeren" in de linkerbovenhoek om de code te testen. Merk op dat de console de originele invoerreeks toont, "ABC 123", evenals de string nadat deze is gewijzigd door de categoriemethode en de getallen zijn verwijderd.
Subclassering is een manier om functionaliteit aan een object toe te voegen, maar door onnodige subclassering te voorkomen door een categorie te gebruiken, wordt de hoeveelheid code verminderd en blijven uw projecten overzichtelijker. Er zijn een aantal scenario's waarbij het nuttig is een categorie te gebruiken. Deel uw categoriescenario's in de onderstaande opmerkingen.