| NSNumber的创建方法和检索方法 | ||
| 创建和初始化方法 | 初始化实例方法 | 检索实例方法 |
| numberWithChar: | initWithChar: | charValue |
| numberWithUnsignedChar: | initWithUnsignedChar: | unsignedCharValue |
| numberWithShort: | initWithShort: | shortValue |
| numberWithUnsignedShort: | initWithUnsignedShort: | unsignedShortValue |
| numberWithInteger: |
initWithInteger: |
integerValue |
| numberWithUnsignedInteger: |
initWithUnsignedInteger: |
unsignedIntegerValue |
| numberWithInt: |
initWithInt: |
intValue |
| numberWithUnsignedInt: |
initWithUnsignedInt: |
unsignedIntValue |
| numberWithLong: |
initWithLong: |
longValue |
| numberWithUnsignedLong: |
initWithUnsignedLong: |
unsignedLongValue |
| numberWithLongLong: |
initWithLongLong: |
longlongValue |
| numberWithUnsignedLongLong: |
initWithUnsignedLongLong: |
unsignedLongLongValue |
| numberWithFloat: |
initWithFloat: |
floatValue |
| numberWithDouble: |
initWithDouble: |
doubleValue |
| numberWithBool: |
initWithBool: |
boolValue |
示例一:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSNumber *myNumber, *floatNumber, *intNumber;
// NSInteger不是一个对象,而是基本数据类型的typedef。
// 它实际上是64位的long或者32位的int。NSUInteger也是类似的typedef
NSInteger myInt;
// integer 型值
intNumber = [NSNumber numberWithInteger: 100];
myInt = [intNumber integerValue];
NSLog(@"%li", (long) myInt);
// long 型值
myNumber = [NSNumber numberWithLong: 0xabcdef];
NSLog(@"%lx", [myNumber longValue]);
// char 型值
myNumber = [NSNumber numberWithChar: 'X'];
NSLog(@"%c", [myNumber charValue]);
// float 型值
floatNumber = [NSNumber numberWithFloat: 100.00];
NSLog(@"%g", [floatNumber floatValue]);
// double 型值
myNumber = [NSNumber numberWithDouble: 12345e+15];
NSLog(@"%lg", [myNumber doubleValue]);
// 发生错误
NSLog(@"%li", (long) [myNumber integerValue]);
// 验证两个Number是否相等
if ([intNumber isEqualToNumber: floatNumber] == YES)
NSLog(@"Numbers are equal");
else
NSLog(@"Numbers are not equal");
// 验证一个Number是否小于、等于或大于另一个Number
// compare函数的返回值:
// 小于 返回NSOrderedAscending
// 等于 返回NSOrderdSame
// 大于 返回NSOrderedDescending
if ([intNumber compare: myNumber] == NSOrderedAscending)
NSLog(@"First number is less than second");
}
return 0;
}
运行测试
示例二:通过@表达式创建数字对象
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSNumber *myNumber, *floatNumber, *intNumber;
NSInteger myInt;
// 注意:如果在@之后的值是一个表达式或者变量需要使用括号。
// NSDecimalNumber是NSNumber的子类,在对象层面提供了一些数字的四则运算方法。
// 整型 integer
intNumber = @100;
myInt = [intNumber integerValue];
NSLog(@"%li", (long) myInt);
// 长整型 long integer
myNumber = @0xabcdefL;
NSLog(@"%lx", [myNumber longValue]);
// 字符型 char
myNumber = @'X';
NSLog(@"%c", [myNumber charValue]);
// 浮点型 float
floatNumber = @100.0f;
NSLog(@"%g", [floatNumber floatValue]);
}
return 0;
}