21
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

32bit と 64bit の差を意識せずに書式文字列で数値を扱うシンプルな方法

Last updated at Posted at 2014-11-19

目的

NSLogNSStringstringWithFormat: で数値を文字列化するときに、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

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?