Categoriile oferă posibilitatea de a adăuga funcționalități unui obiect fără a subclasa sau a schimba obiectul real. Un instrument la îndemână, acestea sunt adesea folosite pentru a adăuga metode la clasele existente, cum ar fi NSString
sau propriile obiecte personalizate.
Lansați Xcode și faceți clic pe File> New> Project. Alegeți o aplicație de vizualizare unică iOS din fereastră și faceți clic pe "Next". Denumiți produsul "Categorii" și introduceți un nume pentru identificatorul companiei dvs., cum ar fi "com.companyName.categories". Alegeți familia de dispozitive iPhone și faceți clic pe "Next". Alegeți o locație pentru stocarea proiectului și faceți clic pe "Creați".
Acum, când proiectul dvs. este configurat, să creăm o categorie care adaugă funcționalități suplimentare NSString
clasă. Faceți clic pe File> New> File și alegeți o categorie Cocoa Touch Objective-C din fereastră. Faceți clic pe "Următorul". Denumiți categoria "RemoveNums" și selectați NSString
din meniul derulant "Categoria activată" (poate fi necesar să tastați manual acest lucru). Faceți clic pe "Următorul" urmat de "Creați".
Înapoi în proiectul dvs. Xcode, dați clic pe "NSString + RemoveNums.h" pentru a vedea fișierul cu antetul categoriei noi. Adăugați următorul cod la interfață pentru a declara metoda.
@interface NSString (RemoveNums) - (NSString *) removeNumbersFromString: (NSString *) șir; @Sfârșit
Faceți clic pe "NSString + RemoveNums.m" pentru a vizualiza fișierul de implementare al categoriei. Adăugați următorul cod pentru a crea o metodă care va elimina toate numerele dintr-un NSString
. Mai întâi definim un NSCharacterSet
din numerele de la zero la nouă pe care le vom folosi ca referință pentru comparare cu șirul de intrare inițial. În acest caz, șirul original "ABC 123" va avea numerele "123" șterse din șir, deoarece metoda de categorie utilizează NSString
metodă stringByTrimmingCharactersInSet:
.
- (NSString *) removeNumbersFromString: (NSString *) șirul NSString * trimmedString = nil; NSCharacterSet * numereSet = [NSCharacterSet characterSetWithCharactersInString: @ "0123456789"]; trimmedString = [string stringByTrimmingCharactersInSet: numbersSet]; return trimmedString;
Faceți clic pe "ViewController.h" și importați categoria adăugând următorul cod.
#import "NSString + RemoveNums.h"
Faceți clic pe "ViewController.m" și adăugați următorul cod la viewDidLoad
metodă. Variabila locală stringWithNums
conține o combinație de litere și numere. Următoarea linie ia variabila șir și o execută prin metoda categoriei removeNumbersFromString
. In cele din urma, NSLog
ieșire valoarea returnată a șirului nou tăiat fără numere.
NSString * stringWithNums = @ "ABC 123"; NSLog (@ "stringWithNums ->% @", stringWithNums); stringWithNums = [stringWithNums removeNumbersFromString: stringWithNums]; NSLog (@ "șir curbat WithNums ->% @", stringWithNums);
Faceți clic pe Produs> Executare sau faceți clic pe săgeata "Rulare" din colțul din stânga sus pentru a testa codul. Observați că consola prezintă șirul de intrare inițial "ABC 123", precum și șirul după ce a fost modificat prin metoda categoriei, iar numerele au fost eliminate.
Subclasarea este o modalitate de a adăuga funcționalitate unui obiect, dar evitarea subclasării inutile prin utilizarea unei categorii va ajuta la reducerea cantității de cod și la menținerea proiectelor mai organizate. Există o serie de scenarii în care utilizarea unei categorii este benefică. Împărtășiți scenariile categoriei dvs. în comentariile de mai jos.