2014年2月25日 星期二

Category

http://shenfive.pixnet.net/blog/post/48100242-category-

有影片! 看Demo 先吧





Category 是對 Obj-C 類別延伸功能的一個語法,也就是在不修改原 Class 的前提下,對該 Class 增加新的 method。
其實他的語法很簡單,很像是Class 的語法,只有少許不同,格式如下:
@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{
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

然後記得在主程式中 #import 這個 category 檔,就可以使用了。如

        NSString *s2=[@"Hello, World! 世界真美好" reverseString];
        NSLog(@"%@",s2);(@"")

就會輸出【好美真界世 !dlroW ,olleH


請參考影片Demo (與文件的程式碼做的不完全一樣,但同樣是在說明 category) 

沒有留言:

張貼留言