在 Objective-C 中,集合類(NSArray、NSDictionary 等)只能存儲對象。NSNumber 是專門用於包裝基本數據類型(int、float、BOOL、char 等)的類,使其能夠存入集合、進行對象化操作。本文詳細介紹 NSNumber 的創建、取值、字面量語法及運算用法。
int intValue = 100; float floatValue = 3.14; BOOL boolValue = YES; NSNumber *intNumber = [[NSNumber alloc] initWithInt:intValue]; NSNumber *floatNumber = [NSNumber numberWithFloat:floatValue]; NSNumber *boolNumber = [NSNumber numberWithBool:boolValue];
自 Clang 3.1 / Xcode 4.4 起支援,更簡潔:
NSNumber *intNum = @80; // 等價於 initWithInt:80 NSNumber *floatNum = @3.14; // 等價於 numberWithFloat:3.14 NSNumber *boolNum = @YES; // 等價於 numberWithBool:YES NSNumber *charNum = @'a'; // 等價於 numberWithChar:'a'
float value = [floatNumber floatValue]; int value2 = [intNumber intValue]; BOOL b = [boolNumber boolValue];
NSArray *arr = @[intNumber, floatNumber, boolNumber]; NSLog(@"arr = %@", arr); // 正常輸出對象
字面量支援括號內表達式:
NSNumber *result = @(1 + 2); // 值為 3 NSArray *mixed = @[@"string", @12, intNum, floatNum, boolNum, charNum, result];
| 基本類型 | 工廠方法 | 字面量示例 | 取值方法 |
|---|---|---|---|
| int | numberWithInt: | @42 | intValue |
| float | numberWithFloat: | @3.14f | floatValue |
| double | numberWithDouble: | @3.14 | doubleValue |
| BOOL | numberWithBool: | @YES / @NO | boolValue |
| char | numberWithChar: | @'c' | charValue |
| long | numberWithLong: | @100L | longValue |
| long long | numberWithLongLong: | @100LL | longLongValue |
| unsigned int | numberWithUnsignedInt: | @100U | unsignedIntValue |
NSNumber 是 Objective-C 基本類型進入對象體系的橋樑。掌握字面量語法(@...)與取值方法(xxxValue)是日常開發的基本功。配合集合類使用時,記住「存入前包裝,取出後解包」的模式即可。