OC-052.NSValue 结构体类型的包装类

OC中集合类中只能存储OC对象不能存储基本数据类型和结构体

存储结构体:结构体 -> 包装类型(NSValue) -> 存入集合类

取出结构体:从集合中取出包装类型 -> 包装类型(NSValue) -> 结构体


创建和提取的方法:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//******1.系统自带的结构体转包装类
        //1.1系统自带的结构体
        NSRange range = {1,2};
        NSValue *value1 = [NSValue valueWithRange:range];
        CGRect rect = CGRectMake(1, 2, 3, 4);
        NSValue *value2 = [NSValue valueWithRect:rect];
        CGSize size = CGSizeMake(1, 2);
        NSValue *value3 = [NSValue valueWithSize:size];
        CGPoint point = CGPointMake(1, 1);
        NSValue *value4 = [NSValue valueWithPoint:point];
        
        //1.2自定义的结构体
        typedef struct{     //自定义一个结构体
            int year;
            int month;
            int day;
        } LSDate;
        LSDate date = {2015,12,16};//初始化
        //使用下面的类方法返回,注意前面是结构体变量的地址,加&,后面是结构体类型的char,通过@encode转成char *
        NSValue *value5 = [NSValue valueWithBytes:&date objCType:@encode(LSDate)];
        NSLog(@"%@",value3);
        
//******2.包装类转结构体
        //2.1系统自带的转换
        range = value1.rangeValue;
        NSRect rect2 = value1.rectValue;
//        value1.sizeValue;
//        value1.pointerValue;
        //2.2自定义结构体的转换
        LSDate birthday;
        [value5 getValue:&birthday]; //让实参得到包装的值
        NSLog(@"%d,%d,%d",birthday.year,birthday.month,birthday.day);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值