
NSLogデバッグの良し悪しは置いておくとして、CGRectとかNSDictionaryとかの値をちょっと確認するのにNSLog使ったりしますよね。CGRectの値を確認するときに一生懸命NSLog("%f", rect.size.width)みたいにやってたりマクロ書いたりしていたんですが、もっといい方法があるのを最近知りました。なんてこったい状態。
例えばCGRectではNSStringFromCGRectというメソッドがありまして、これを使うとこんな風に書けるわけです。
CGRect rect = CGRectMake(0, 0, 200, 100);
NSLog(@"%@", NSStringFromCGRect(rect));
// {{0, 0}, {200, 100}} と出力される
めちゃ楽ですね。これまでの時間返せっていう。
調べてみたらNSStringFromXXXXX系はこれだけありました。
NSStringFromCGPointNSStringFromCGSizeNSStringFromCGRectNSStringFromCGAffineTransformNSStringFromUIEdgeInsetsNSStringFromUIOffset
じゃあDictionaryやArrayはどうすんの?っていうと、こちらも一気に全ダンプできます。どちらもdescriptionを呼び出すとNSString*に変換してくれるようです。
NSArray* array = @[@"hoge", @"fuga", @"foobar", @[@"hogehoge", @"aaaaaa"]];
NSLog(@"%@", [array description]);
NSDictionary* dic = @{@"key1":@"value1",
@"key2":@"value2",
@"key3":@{
@"innerkey1":@"innervalue1",
@"innerkey2":@"innervalue2"
}
};
NSLog(@"%@", [dic description]);
// array
(
hoge,
fuga,
foobar,
(
hogehoge,
aaaaaa
)
)
// dic
{
key1 = value1;
key2 = value2;
key3 = {
innerkey1 = innervalue1;
innerkey2 = innervalue2;
};
}
文字列からCGRectへの変換
逆もできます。
先ほどのNSStringFromCGRectで変換された文字列と同じ形式の文字列を用意して、CGRectFromNSStringを使えばCGRectができます!
CGRect rect2 = CGRectFromString(@"{{0, 0}, {320, 568}}");☄
こちらも同じ数ターン用意されていました。
CGPointFromStringCGSizeFromStringCGRectFromStringCGAffineTransformFromStringUIEdgeInsetsFromStringUIOffsetFromString
おわり
こいつらを駆使して楽しましょう!