コードスニペットとしては、
utilのようなクラスに書く前提の方が楽ですが、
実際の使用感としては、
カテゴリとして定義した方が直感的だし、
メソッド名としてもスッキリさせることができる。
ということで、
以前にスニペット的に覚え書きしておいた、
下記のトピックをカテゴリに定義しておく。
http://synonym-of-raspberry.blogspot.jp/2014/02/iosobjective-cnsstringlength.html
http://synonym-of-raspberry.blogspot.jp/2014/02/iosobjective-c_16.html
カテゴリ名は"Addition"とでもしておきます。
(まぁ、そんなネーミングにしたら手広そうってくらいのノリw)
[NSString+Addition.h]
//
// NSString+Addition.h
//
#import <Foundation/Foundation.h>
@interface NSString (Addition)
- (NSUInteger)realLength;
- (BOOL)isWhiteSpaceOnly;
@end
[NSString+Addition.m]
//
// NSString+Addition.m
//
#import "NSString+Addition.h"
@implementation NSString (Addition)
- (NSUInteger)realLength {
NSUInteger count = 0;
if (self == nil) {
return count;
}
int length = [self length];
for (int i = 0; i < length; i++) {
unichar uchar = [self characterAtIndex:i];
if (CFStringIsSurrogateHighCharacter(uchar)) {
// サロゲートペア:上位サロゲート
i++;
++count;
} else if (CFStringIsSurrogateLowCharacter(uchar)) {
// サロゲートペア:下位サロゲート
// 無視(何もしない)
} else {
++count;
}
}
return count;
}
- (BOOL)isWhiteSpaceOnly {
BOOL ret = NO;
NSString *newText = @"";
if (self == nil || [self isEqualToString:@""]) {
ret = YES;
} else {
newText = [self stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([newText length] == 0) {
ret = YES;
}
}
return ret;
}
@end
上記例の内容だと、
ソースファイルを取り込んで、
ヘッダをimportしてやって、
色んなプロジェクトでそのまま流用できます。
util的なノリです。
プロジェクト独自ではあるが、
そのプロジェクト内では色んなトコで使うようなものは、
また別のカテゴリにまとめるようにしておく。
色んなところで使えそうなものは、
NSString+Additionに追記していく。
という整理をすれば、
NSString+Additionを育てながら、
色んなプロジェクトで使い回していけるワケです。
それでは。
ちゃお☆
まこぴー。