Objective-CでNSNumberをintに変換する


122

[NSNumber numberWithInt:42]またはを使用@(42)して、NSDictionaryに追加する前にintをNSNumberに変換します。

int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };

NSDictionaryから値を取得するときに、NSNumberからintに戻すにはどうすればよいですか?

NSNumber *number = dict[@"integer"];
int *intNumber = // ...?

この方法でキャストするとキャストが必要であるという例外がスローされます。

int number = (int)dict[@"integer"];

回答:



61

NSInteger可能な場合は、データ型に固執する必要があります。したがって、次のような番号を作成します。

NSInteger myValue = 1;
NSNumber *number = [NSNumber numberWithInteger: myValue];

integerValue次に、デコードはメソッドで機能します。

NSInteger value = [number integerValue];

なぜ彼は固執すべきNSIntegerですか?
ユリアンオノフレ14

1
intはい、原始的です。ただし、その最大許容数はあまり正確に定義されていません。NSInteger基本的に、32ビットマシンでは32ビット、64ビットデバイスでは64ビットであることが知られているプリミティブ整数型の単なるエイリアスです。
Max Seelemann、2015年

1
はい、Appleは提案しています。
Max Seelemann、2015年

1
ネイティブの数値演算については何も推測しないことをお勧めします。確かにを使用できintますが、クロスプラットフォームライブラリとのインターフェースを除いて、そうする意味はほとんどありません。そしてそれでも、のようなものuint32_tが使用する方が良いでしょう。
Max Seelemann、2015年

1
そうすれば、確かにプラットフォームのコーディング標準との整合性が高まります。
Max Seelemann、2015年



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.