我想过滤掉除字母和数字之外的所有内容,因此我调整了 Lorean 在 NSString 上的 Category 实现,使其工作方式有所不同。在此示例中,您指定了一个仅包含您想要保留的字符的字符串,而其他所有内容都将被过滤掉:
@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的一个很棒的特性!