Objective-C 编程:NSValue

  • NSArray 等集合类型只能存储对象。——对象
  • NSNumber 可以将基础数据类型转化为对象。——基础数据类型 ➡️ 对象
  • NSValue 可以将结构类型转化为对象。——结构 ➡️ 对象

包装&展开

  • 包装(wrapping):结构 ➡️ 对象。
  • 展开(unwrapping):从对象中解出基本类型。

NSValue 方法

+ (NSValue *)valueWithPoint:(NSPoint)point;
+ (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
+ (NSValue *)valueWithEdgeInsets:(NSEdgeInsets)insets NS_AVAILABLE(10_10, 8_0);

CGPoint

// NSPoint 
NSPoint somePoint = NSMakePoint(100, 100);
NSValue *point = [NSValue valueWithPoint:somePoint];

// CGPoint
NSValue *myPointValue = [NSValue valueWithPoint:CGPointMake(10, 10)];
CGPoint point = [myPointValue pointValue];

CGSize

// 大小
NSValue *mySizeValue = [NSValue valueWithSize:CGSizeMake(375, 664)];
CGSize size = [mySizeValue sizeValue];

CGRect

// 矩形区域
NSValue *myRectValue = [NSValue valueWithRect:CGRectMake(0, 0, 375, 664)];
CGRect rect = [myRectValue rectValue];

NSRange

// 范围
NSValue *myRangeValue = [NSValue valueWithRange:NSMakeRange(0, 10)];
NSRange range = [myRangeValue rangeValue];

结构体

// 对自定义的结构体封包、解包
struct WXpoint {
    float a;
    float b;
};

struct WXpoint p = {10,50};

//封包
NSValue *pointvalue1 = [NSValue value:&p
  withObjCType:@encode(struct WXpoint)];

//解包
struct WXpoint p2;
[pointvalue1 getValue:&p2];

你可能感兴趣的:(Objective-C 编程:NSValue)