文字と数字以外のすべてをフィルターで除外したかったので、Lorean の NSString でのカテゴリーの実装を少し異なる動作に適応させました。この例では、保持したい文字のみを含む文字列を指定しており、それ以外はすべて除外されています。
@interface NSString (PraxCategories)
+ (NSString *)lettersAndNumbers;
- (NSString*)stringByKeepingOnlyLettersAndNumbers;
- (NSString*)stringByKeepingOnlyCharactersInString:(NSString *)string;
@end
@implementation NSString (PraxCategories)
+ (NSString *)lettersAndNumbers { return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; }
- (NSString*)stringByKeepingOnlyLettersAndNumbers {
return [self stringByKeepingOnlyCharactersInString:[NSString lettersAndNumbers]];
}
- (NSString*)stringByKeepingOnlyCharactersInString:(NSString *)string {
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:string];
NSMutableString * mutableString = @"".mutableCopy;
for (int i = 0; i < [self length]; i++){
char character = [self characterAtIndex:i];
if([characterSet characterIsMember:character]) [mutableString appendFormat:@"%c", character];
}
return mutableString.copy;
}
@end
カテゴリを作成したら、それらを使用するのは簡単で、任意のNSStringで使用できます。
NSString *string = someStringValueThatYouWantToFilter;
string = [string stringByKeepingOnlyLettersAndNumbers];
または、たとえば、母音以外のすべてを取り除きたい場合:
string = [string stringByKeepingOnlyCharactersInString:@"aeiouAEIOU"];
まだ Objective-C を学習中で、カテゴリを使用していない場合は、試してみることをお勧めします。これらは、分類するクラスのすべてのオブジェクトにより多くの機能を提供するため、このようなものを配置するのに最適な場所です。
カテゴリは、追加するコードを簡素化してカプセル化するため、すべてのプロジェクトで簡単に再利用できます。これは、Objective-C の優れた機能です。