ぴよログ

↓に移転したのでこっちは更新されません、多分。

NSLogデバッグのときに便利なCGRect→NSStringの変換

移転しました →

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

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

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

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

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

おわり

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