------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
简介
引入:NSArray、NSSet、NSDictionary这些OC集合都只能存放OC对象,不能存放基本数据类型(int、char、double。。。)。如果我们想将基本数据类型存到这些OC集合中,那么我们将基本数据类型(int、char、double。。。)包装成OC对象,那么就可以存到OC集合中。NSNumber可以将基本数据类型包装为OC对象。
NSValue:用来存储一个C或者OC的数据,可以包装基本数据类型(int、double。。),也可以包装结构体(CGPoint、CGSize、CGRect)。。
NSNumber:继承于NSValue,通常用来存储C语言中的基本数据类型(int、double。。)。
NSNumber/NSValue
1.数字对象与基本数据类型的转换
//1.int <-> NSNumber int a = 10; NSNumber *numA = [NSNumber numberWithInt:a]; int tempA = numA.intValue; //2.double <-> NSNumber double b = 20.5f; NSNumber *numB = [NSNumber numberWithDouble:b]; double tempB = numB.doubleValue; //3.char <-> NSNumber char ch = 'A'; //NSNumber *numCh = @(ch); NSNumber *numCh = [NSNumber numberWithChar:ch]; char tempCh = numCh.charValue; NSLog(@"%c",tempCh); //4.NSString <-> NSNumber char *str = "string"; NSNumber *numStr = [NSNumber numberWithChar:str]; char *tempStr = numStr.charValue; //5.编译器特性 /*@1 == [NSNumber numberWithInt:1]; *@"string" == [NSNumber numberWithInt:"string"]; *int a = 10; *@(a) == [NSNumber numberWithInt:a]; */
2.数字对象的基本运用
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //1.结构体 <-> NSValue CGPoint a = {1,2}; NSValue *vaA = [NSValue valueWithPoint:a]; CGPoint tempA = vaA.pointValue; //将CGPoint包装成OC对象,从而可以存入OC集合中 NSMutableSet *set = [NSMutableSet set]; [set addObject:vaA]; //将double类型包装成NSNumber对象,可以存入集合中 [set addObject:@10.5]; [set enumerateObjectsUsingBlock: ^(id obj, BOOL *stop) { NSLog(@"%@",obj); }]; } return 0; }
结果输出:
2015-05-10 22:47:41.018 09-NSNumber基本使用[896:38347] NSPoint: {1, 2} 2015-05-10 22:47:41.019 09-NSNumber基本使用[896:38347] 10.5
时间: 2024-10-05 09:41:19