Categories可以爲一個對象添加方法而不需要增加該類的子類或者更改當前的對象。實際上Categories通常被用來爲已經存在的類添加方法,比如你可以自己爲 NSString 字符串類添加你自己的方法。
Step1: 創建項目
啓動Xcode -> File -> New -> Project. 然後創建一個 iOS Single View Applciation。這裏我們命名爲 Categories.
Step2: 創建Category
現在來創建一個Category來爲NSString添加擴展方法。點擊 File -> New -> File 然後選擇 Cocoa Touch Objective-C category. 這裏我們命名爲 RemoveNums。記得要從 Category on 下拉框選擇 NSString,最後點擊Create按鈕旁的Next按鈕。
聲明Category擴展的方法。
選擇 "NSString+RemoveNums.h"文件。添加以下代碼:
1 |
@interface
NSString (RemoveNums) |
2 |
-
(NSString *)removeNumbersFromString:(NSString *)string;@end |
實現Category擴展的方法
接着來到"NSString+RemoveNums.m"文件。添加以下代碼。大家可以看到這個方法實際做的事情就是從整個NSString去除掉所有的數字字符。
1 |
-
(NSString *)removeNumbersFromString:(NSString *)string |
2 |
{ |
3 |
NSString
*trimmedString = nil; |
4 |
NSCharacterSet
*numbersSet = [NSCharacterSet characterSetWithCharactersInString:@ "0123456789" ]; |
5 |
trimmedString
= [string stringByTrimmingCharactersInSet:numbersSet]; |
6 |
return trimmedString; |
7 |
} |
Step3: 導入Category
在"ViewController.h"文件頭部添加以下代碼來導入Category
1 |
#import
"NSString+RemoveNums.h" |
Step4: 測試Category
在 ViewController.h 文件的 viewDidLoad 方法中添加以下代碼。
1 |
NSString
*stringWithNums = @ "ABC
123" ; |
2 |
NSLog(@ "stringWithNums
--> %@" ,stringWithNums); |
3 |
stringWithNums
= [stringWithNums removeNumbersFromString:stringWithNums]; |
4 |
NSLog(@ "trimmed
stringWithNums --> %@" ,stringWithNums); |
Step5: 使用Category的方法
在Xcode的菜單欄點擊 Product -> Run,測試過程中,請注意控制檯首先輸出的 "ABC 123",然後被方法去除數字後輸出的"ABC"
結論
我們都知道添加子類是爲某一種對象添加方法的途徑,但是爲了整個代碼更加簡潔直觀,我們通常會用Category的擴展方法來替代子類的添加。