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;
}
相關文章
相關標籤/搜索