其實他的語法很簡單,很像是Class 的語法,只有少許不同,格式如下:
@interface 原Class名稱 (Category名稱)
// 方法的宣告
@implementation 原Class名稱 (Category名稱)
@interface 原Class名稱 (Category名稱)
// 方法的宣告
@end
@implementation 原Class名稱 (Category名稱)
//方法的實作
@end
因為是擴充原來的 Class 所以沒有父類別,它就相等於原類別相同的位置,同樣的分為 .h 與 .m 檔,檔案名稱一般的貫例為 “ 原Class名稱+Category名稱.h” 與 “ 原Class名稱+Category名稱.m” 。
舉個比較實際的例子,我要擴充 NSString 這個類別的功能,新加一個方法叫 reverseString 所以我們設一個叫 reverse 的 Category,並加入一個 reverseString 的方法,目標是要回傳一個倒過來的字串,如
程式如下:
@interface NSString (reverse)
-(NSString *)reverseString;
@end
@implementation NSString (reverse)
-(NSString *)reverseString;
@end
@implementation NSString (reverse)
-(NSString *)reverseString{
NSMutableString *returnString = [NSMutableString stringWithCapacity:self.length];
//設定回傳用變數,相當與字串本身長度之 NSMutableString
for (int i=(int)self.length-1; i>=0; i--) [returnString appendString:[NSString stringWithFormat:@"%C",[self characterAtIndex:i]]];
//由自身的最後面開始,取一個 unchar 並加到要回傳的變數中
//由於取出的字元為 unicode 所以要用大寫的 %C 字元格式,而不是小寫的 %c 字元格式
return returnString;//回傳值
}
@end
}
@end
然後記得在主程式中 #import 這個 category 檔,就可以使用了。如
NSString *s2=[@"Hello, World! 世界真美好" reverseString];
NSLog(@"%@",s2);(@"")
NSLog(@"%@",s2);(@"")
就會輸出【好美真界世 !dlroW ,olleH】
請參考影片Demo (與文件的程式碼做的不完全一樣,但同樣是在說明 category)
請參考影片Demo (與文件的程式碼做的不完全一樣,但同樣是在說明 category)
沒有留言:
張貼留言