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系はこれだけありました。

  • NSStringFromCGPoint
  • NSStringFromCGSize
  • NSStringFromCGRect
  • NSStringFromCGAffineTransform
  • NSStringFromUIEdgeInsets
  • NSStringFromUIOffset

じゃあ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}}");

こちらも同じ数ターン用意されていました。

  • CGPointFromString
  • CGSizeFromString
  • CGRectFromString
  • CGAffineTransformFromString
  • UIEdgeInsetsFromString
  • UIOffsetFromString

おわり

こいつらを駆使して楽しましょう!