yashiganiの英傑になるまで死ねない日記

週末はマスターバイクでハイラルを走り回ります

今日のtips

こういうのを

NSArray *version = [NSArray arrayWithObjects:@"10.5", @"10.6", @"10.7", nil];
NSArray *name = [NSArray arrayWithObjects:@"Leopard", @"Snow Leopard", @"Lion", nil];
@"10.5: Leopard", @"10.6: Snow Leopard", @"10.7: Lion"

こういう感じにしたいときに,いつも

NSMutableArray *a = [NSMutableArray array];
for (int i = 0; i < 3; ++i) {
    NSString *s = [NSString stringWithFormat:@"%@: %@", [version objectAtIndex:i], [name objectAtIndex:i]];
    [a addObject:s];
}

みたいに書いてたけど,一度 NSDictionary に入れてやって,

__block NSMutableArray *a = [NSMutableArray array];
NSDictionary *d = [NSDictionary dictionaryWithObjects:version forKeys:name];
[d enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    NSString *s = [NSString stringWithFormat:@"%@: %@", (NSString *)obj, (NSString *)key];
    [a addObject:s];
}];

と書くとスッキリ書ける.
拡張 for が使えなくてなんか嫌やなーと思ってたけど,これならいい感じに書けていいですね.
文字列連携以外にも使えるし.
キャストがあんまりなんで [NSObject description] を使ってもいい.