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