目的
NSLog
や NSString
の stringWithFormat:
で数値を文字列化するときに、32bit 環境と 64bit 環境とでサイズが異なるために、ビルドターゲットによって警告が表示されたりされなかったりします。
それを回避するのに "%zd"
や "%tu"
という書式を使って対応する方法がありますが、数値を単純に表示したいだけなら NSNumber
にラップすると簡単です。
NSNumber でラップして文字列に変換する
Objective-C では @10
という表記で 10
という値を NSNumber
にラップできますが、同じようにして変数も NSNumber
にラップ (正式には Boxing と言うらしい) できます。
NSNumber
は書式 %@
に渡すと文字列として置き換えられます。
NSInteger integerValue = -1;
NSUInteger uintegerValue = 2;
CGFloat floatValue = 3.5;
double doubleValue = 4.5;
NSLog(@"NSInteger = %@", @(integerValue));
NSLog(@"NSUInteger = %@", @(uintegerValue));
NSLog(@"CGFloat = %@", @(floatValue));
NSLog(@"double = %@", @(doubleValue));
このようにすることで、NSNumber にラップされるときに bit 環境の違いが中和されるため、警告に煩わされることなく数値を文字列に変換できます。
サンプルの実行結果
このときの実行結果は次の通りです。
NSInteger = -1
NSUInteger = 2
CGFloat = 3.5
double = 4.5