OC基本数据类型与对象之间的转换方法

1.Foundation框架中提供了很多的集合类                   

如:NSArrayNSMutableArrayNSSetNSMutableSetNSDictionaryNSMutableDictionary是这些类只能存放OC对象类型的数据


2.如果要存放基本数据类型,必须先将基本暑假类型包装成对象类型然后再用集合类进行存储,OC中提供的包装类.NSNumberNSValue。其中NSNumber继承于NSValue


3.NSNumber主要针对于基本数据类型的包装,NSValue主要针对结构体进行包装


4.将包装成NSNumberNSValue对象类型后存放在数组中,然后从集合类中取出NSNumberNSValue对象再转换成为基本数据类

例:

    //int基本数据类型包装成NSMumber对象类型

    int a =5;

    NSNumber *a = [NSNumber alloc]initWithInt:a];

            

5.系统中定义:

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

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

    + (NSNumber *)numberWithUnsignedInt:(unsignedint)value;

    + (NSNumber *)numberWithLong:(long)value;

    + (NSNumber *)numberWithUnsignedLong:(unsignedlong)value;

  等常用的方法

可以看出虽然NSNumber提供了很多将基本数据类型转换成为NSNumber对象的方法,但是这样写起来太麻烦,Xcode编译器新特性支持@[(基本数据类型)]方式,可以直接将基本数据类型转换称为NSNumber对象类型。可以看出将int,double等基本数据类型在直接转换就是在前面加@,如果是变量就用()将变量括起来;


6.NSValue的基本使用

            

    // 创建点坐标结构体

    CGPoint point = CGPointMake(20,20);


    // 将结构体转换成为NSValue对象

    NSValue *pointValue = [NSValue valueWithPoint:point]; 


    // NSValue对象存放到数组中

    NSArray *array =@[pointValue];


    // 从数组中取出pointValue对象

    NSValue *value = array[0];


    // NSValue对象转换成为结构体

    CGPoint point2 = [valuepointValue];

            

    // 输出:转换成基本类型结构体point2的值:

    //第一种方式:将结构体先转换为字符串然后打印

     NSString *str =NSStringFromPoint(point2);

     NSLog(@"%@",str);//输出 {20,20}


     //第二种方式:依次取出对应的值打印

     // NSLog(@"%f %f",point2.x,point2.y);输出 20.000000 20.000000



你可能感兴趣的:(IOS)