Foundation框架: 10.NSNumber和NSValue的基本认识和运用
前面我们学完了Foundation框架里面三大集合类, 以后在开发的过程中, 我们就可以非常方便的存储我们想要的各种数据, 但前面我也讲过了, 三大集合类都不可以存放基本数据类型, 这让我们很头疼, 如果我必须得存一些基本数据类型, 那么怎么办呢? 其实在OC中是有这么一个非常好用的类, 可以存储我们的基本数据类型, 它就是NSNumber, 下面让我们一起来看看怎么运用吧:
PS:由于NSNumber的存储方法太多, 这里只选择某几个来演示.
例子:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSNumber *num = [NSNumber numberWithInt:10]; int a = [num intValue]; NSLog(@"%d", a); return 0; }
打印出来的结果:
2015-02-06 14:58:39.232 10.NSNumber[4733:303] 10
在上面, 我们利用NSNumber的方法把int 类型10存入到了num中, 然后再利用NSNumber的对象方法, 把这个值取出来赋给int类型a, 打印出来的结果就是10.
当然, 这个也可以运用到NSDictionary和NSArray中, 比如:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSNumber *num = [NSNumber numberWithInt:100]; NSArray *ary = @[@"number", num]; NSLog(@"%@", ary); return 0; }
打印出来的结果:
2015-02-06 15:04:09.320 10.NSNumber[4759:303] ( number, 100 )
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSNumber *num = [NSNumber numberWithInt:20]; NSDictionary *dic = @{@"age" : num, @"name" : @"rose"}; NSLog(@"%@", dic); return 0; }
打印出来的结果:
2015-02-06 15:05:37.185 10.NSNumber[4768:303] { age = 20; name = rose; }
回到这里, 肯定有人会想到, 前面的NSArray和NSDictionary都有简便的创建方法, 那么NSNumber有没有呢, 其实答案是肯定的, 这又是一个Xcode的特性, 又是编译器帮我们干的好事, 下面来看看:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSDictionary *dic = @{@"age" : @20, @"name" : @"rose"}; NSLog(@"%@", dic); return 0; }
打印出来的结果:
2015-02-06 15:15:35.543 10.NSNumber[4786:303] { age = 20; name = rose; }
只要在基本数据类型前面加哥@符号, 就可以把NSNumber的一大串垃圾代码通通扫掉, Xcode会帮我们自动生成.
那么为什么NSNumber可以包装基本数据类型呢? 其实NSNumber继承与一个叫做NSValue的一个类, 而这个类就是用来包装非OC对象类型用的, 比如基本数据类型, 结构体, 枚举等等, 下面让我们来看看:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSValue *va = [NSValue valueWithPoint:CGPointMake(10, 20)]; NSArray *ary = @[va]; NSDictionary *dic = @{@"point" : va}; NSLog(@"ary = %@, dic = %@", ary, dic); return 0; }
打印出来的结果:
2015-02-06 15:35:40.221 11.NSValue[4831:303] ary = ( "NSPoint: {10, 20}" ), dic = { point = "NSPoint: {10, 20}"; }
由于方法太多, 这里就不一一介绍了, 大家可以回去慢慢尝试, 好了, 这次就讲到这里, 下次我们继续~~~