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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容