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
おわり
こいつらを駆使して楽しましょう!