Objective-C 学习笔记 | 范畴
Objective-C 学习笔记 | 范畴
通过使用范畴(Category),程序员可以为任何已有的类添加方法。
创建一个 Objective-C category,新范畴命名为 BNRVowelCounting,对应的类为 NSString。打开 NSString+BNRVowelCounting.h,为范畴声明一个方法,该方法会加入 NSString 类,代码如下所示:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NSString (BNRVowelCounting)
- (int)bnr_vowelCount;
@end
NS_ASSUME_NONNULL_END
在 NSString+BNRVowelCounting.m 中实现相应的方法:
#import "NSString+BNRVowelCounting.h"
@implementation NSString (BNRVowelCounting)
- (int)bnr_vowelCount
{
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"aeiouAEIOU"];
int count = 0;
for (int i = 0; i < [self length]; i++)
{
unichar c = [self characterAtIndex:i];
if ([charSet characterIsMember:c])
count++;
}
return count;
}
@end
在 main.m 中使用新创建的 NSString 方法:
#import <Foundation/Foundation.h>
#import "NSString+BNRVowelCounting.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"Hello, world!";
NSLog(@"\"%@\" has %d vowels", str, [str bnr_vowelCount]);
}
return 0;
}
应该使用范畴来给已经存在的类增加新方法,而不要在范畴中替换已经存在的方法,这种情况下应该创建该类的子类,override 其方法。