一NSNumber 类型转换

NSNumber 把基本数据类型包装成一个对象类型。NSNumber之所以可以(只能)包装基本数据类型,是因为继承了NSValue

@20 等价于 [NSNumber numberWithInt:20];

 

NSNumber 将各种数据类型包装成NSNumber类型

@10.3 //包装小数为NSNumber

@20 //包装整数 为NSNumber

@"abc" //包装字符型( NSString) 为NSNumber

@'abc' //包装字符 (NSNumber) 为NSNumber

   int age = 100  

  @age  报错,系统会认为这是一个关键字。

  @(age)  正常。()括号表示取值,表示age是一个整体。

 

二 int,NSInteger,NSUInteger,NSNumber 

1.当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。

2.NSUInteger是无符号的,即没有负数,NSInteger是有符号的。

3.有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?它们的功能当然是不同的。

 NSInteger是基础类型,但是NSNumber是一个类。如果想要在NSMutableArray里存储一个数值,直接用NSInteger是不行的,比如在一个NSMutableArray里面这样用:

NSMutableArray *array = [[NSMutableArray alloc]init];

[array addObject:[NSNumber numberWithInt: 88]];   //错误

[array addObject:[NSNumber numberWithInt: @88]];  //正确

Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型。

例如以下创建方法:

+ (NSNumber *) numberWithChar: (char) value;

+ (NSNumber *) numberWithInt: (int) value;

+ (NSNumber *) numberWithFloat: (float) value;

+ (NSNumber *) numberWithBool: (BOOL) value;

将基本类型数据封装到NSNumber中后,就可以通过下面的实例方法重新获取它:

- (char) charValue;

- (int) intValue;

- (float) floatValue;

- (BOOL) boolValue;

- (NSString *) stringValue;

 例子:

NSNumber *num = [NSNumber numberWithInt:88];
NSInteger integer = [num intValue];

 

 

 

三 NSDate

 

1 NSDate *date = [NSDate date];
2 NSLog(@"%@" , date);
3 NSDate *date2 = [NSDate dateWithTimeInterval: 5 sinceDate: date];
4 NSLog(@"%@" , date2);

第2行:打印的是0时区(格林威治时间),北京时间:东八区

第3行: 和date比较相差5秒的时间间隔 。

 

1 NSTimeInterval seconds = [date timeIntervalSince1970];
2 NSLog(@"%ld" , seconds);
3 
4 [date timeIntervalSinceNow]

第1行: 从1970到现在是多少秒? 1970是电脑诞生的日子。

第4行: 从左面时间到现在是多少秒?

 

1 NSDate *date3 = [NSDate date];
2 NSDateFormatter *formatter =[[NSDateFormatter alloc]init];
3 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
4 NSString *str =[formatter stringFromDate:date] ;
5 NSLog(@"date=%@" , str);

第3行: yyyy代表年,MM代表月,dd代表日, HH代表24小时,hh代表12小时 ,mm代表分,ss代表秒。

 

1 NSDateFormatter *formatter1 =[[NSDateFormatter alloc]init];
2 formatter1.dateFormat = @"yyyy-MM-dd HH:mm:ss";
3 NSString *time = @"2016-02-22 21:49:30";
4 NSDate *date4 = [formatter1 dateFromString:time];
5 NSLog(@"date4=%@" , date4);

第4行:把NSString转换成NSDate。