2011年6月1日水曜日

NSStringをLL風に置換・加工できるようにするカテゴリ拡張

参考: getterのブラケット記法をドットに置き換える方法

@"abc".replace(@"b", @"d"); // adc
@"abc".append(@"def");      // abcdef
@"abc".length;              // 3

のような形で、文字列を扱えるようになるカテゴリです。
ブロックを得るgetterを設定していますが、関数の中身まではXcodeで補完できないので、
引数の数などにご注意下さい。
(引数チェックは省いています。)

//
//  NSString+LLLikeOperation.h
//  M2
//

typedef NSString *(^NSStringReplacer)(NSString *existingString, NSString *newString);
typedef NSString *(^NSStringAppender)(NSString *aString);

@interface NSString (LLLikeOperation)

@property (readonly) NSUInteger length;
@property (readonly) NSStringReplacer replace;
@property (readonly) NSStringAppender append;

@end



//
//  NSString+LLLikeOperation.m
//  M2
//

#import "NSString+LLLikeOperation.h"

@implementation NSString (LLLikeOperation)

@dynamic length;

- (NSStringReplacer)replace
{
  NSStringReplacer replacer = ^NSString*(NSString *existingString, NSString *newString) {
    return [self stringByReplacingOccurrencesOfString:existingString withString:newString];
  };
  
  return replacer;
}

- (NSStringAppender)append
{
  NSStringAppender appender = ^NSString*(NSString *aString) {
    return [self stringByAppendingString:aString];
  };
  
  return appender;
}

@end

0 件のコメント:

コメントを投稿