NSValue

 

#import <Foundation/Foundation.h>

//定义一个数据结构
typedef struct myRect
{
    float x ;
    float y ;
    float w ;
    float h ;
}
//定义的结构体类型
SSRect;

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        //声明一个点结构体对象
        //对于结构体对象:不加*
        CGPoint point ;
        //x类型为CGFloat
        //CGFloat类型定义为double
        point.x = 10.01;
        point.y = 20.01;
        
        //CGPoint* pPoint = &point ;
        //定义一个大小结构体对象
        //用来描述矩形的长,宽度
        CGSize size ;
        //宽度变量
        size.width = 100 ;
        //高度变量
        size.height = 200 ;
        
        //定义一个矩形结构体对象
        CGRect rect ;
        //矩形的左上角坐标
        rect.origin.x = 5 ;
        rect.origin.y = 6 ;
        //矩形的宽度和高度
        rect.size.width = 100  ;
        rect.size.height = 200 ;
        
        //NSPoint pt ;
        
        //将CGPoint类型对象转化为NSValue对象
        //参数:为CGPoint或NSPoint类型的对象
        
        NSValue* valuePoint = [NSValue valueWithPoint:point] ;
        
        //将CGSize类型对象转化为NSValue对象
        //valueWithSize:参数为CGSize
        NSValue* valueSize = [NSValue valueWithSize:size] ;
        
        //将矩形CGRect对象转化为NSValue对象
        NSValue* valueRect = [NSValue valueWithRect:rect] ;
        
        //范围结构体对象
        NSRange range ;
        //开始位置
        range.location = 10 ;
        //长度
        range.length = 20 ;
        
        //将NSRange转化为NSValue对象
        NSValue* valueRange = [NSValue valueWithRange:range] ;
        //储存结构体对象数组
        NSMutableArray* array = [[NSMutableArray alloc] init] ;
        
        //将结构体对象添加到数组中
        //Rectangle
        //
        [array addObject:valuePoint] ;
        [array addObject:valueSize] ;
        [array addObject:valueRect] ;
        [array addObject:valueRange] ;
        NSLog(@"1======数组%@",array);
        //取得数组的第一个对象
        id obj = array[0] ;
        
        NSValue* vPoint = (NSValue*) obj ;
        
        //将NSValue中CGPoint的值转化为CGPoint类型取出
        CGPoint pt = [vPoint pointValue] ;
        
        NSLog(@"pt.x = %f,pt.y = %f",pt.x,pt.y);
        
        NSValue* vSize = array[1] ;
        //获取size类型
        NSSize si = [vSize sizeValue] ;
        
        NSValue* vRect = array[2] ;
        //得到矩形
        NSRect rec = [vRect rectValue] ;
        
        NSValue* vRange = array[3] ;
        //得到范围
        NSRange rang = [vRange rangeValue] ;
        
        //定义一个自定结构体对象
        SSRect myRect ;
        
        myRect.x = 10 ;
        myRect.w = 20 ;
        myRect.y = 30 ;
        myRect.h = 40 ;
        
        NSValue* myValue = [NSValue valueWithBytes:&myRect objCType:@encode(SSRect)];
        
        [array addObject:myValue] ;
        NSLog(@"2======数组%@",array);
        //
        SSRect rect2 ;
        
        [myValue getValue:&rect2] ;
        
        NSLog(@"r2.x=%f,r2.y=%f,r2.w=%f,r2.h=%f",rect2.x,rect2.y,rect2.w,rect2.h) ;
        
    }
    return 0;
}
相关文章
相关标签/搜索