iOS 开发怎么读取NSValue的值

38 阅读1分钟

在iOS开发中,读取NSValue的值需要根据NSValue所包装的数据类型来选择合适的方法。以下是一些常见数据类型的读取方法,参考了我搜索到的资料:

  1. 处理基本数据类型
  • 对于CGPoint类型,可以使用CGPointValue方法。

NSValue *pointValue = [NSValue valueWithCGPoint:CGPointMake(25.0, 15.0)];

CGPoint point = [pointValue CGPointValue];

NSLog(@"point is %@.", NSStringFromCGPoint(point));

这段代码展示了如何将CGPoint包装成NSValue对象,并从中提取CGPoint值。

  1. 处理NSRange类型
  • 使用rangeValue方法。

NSRange rangeA = NSMakeRange(0, 10);

NSValue *rangeValue = [NSValue valueWithRange:rangeA];

NSRange rangeB = [rangeValue rangeValue];

NSLog(@"%d,%d", rangeB.location, rangeB.length);

这段代码展示了如何将NSRange包装成NSValue对象,并从中提取NSRange值。

  1. 处理自定义结构体
  • 使用getValue:方法。

struct cat {

NSInteger weight;

};

struct cat myCat = {900};

NSValue *catValue = [NSValue value:&myCat withObjCType:@encode(struct cat)];

struct cat myCat1;

[catValue getValue:&myCat1];

NSLog(@"myCat1.weight = %ld", myCat1.weight);

这段代码展示了如何将自定义结构体包装成NSValue对象,并从中提取自定义结构体值。

  1. 处理其他系统框架提供的数据结构
  • 例如CGSize、UIEdgeInsets等,可以使用对应的方法如CGSizeValue、UIEdgeInsetsValue等。

CGSize size = CGSizeMake(50, 50);

NSValue *sizeValue = [NSValue valueWithCGSize:size];

CGSize extractedSize = [sizeValue CGSizeValue];

NSLog(@"size is %@.", NSStringFromCGSize(extractedSize));

这段代码展示了如何将CGSize包装成NSValue对象,并从中提取CGSize值

  1. 处理任意数据结构
  • 使用valueWithBytes:objCType:和getValue:方法。

CGRect rect = CGRectMake(0, 0, 320, 480);

NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)];

CGRect extractedRect;

[value getValue:&extractedRect];

NSLog(@"rect is %@.", NSStringFromCGRect(extractedRect));

这段代码展示了如何将任意数据结构包装成NSValue对象,并从中提取任意数据结构值。

通过这些方法,可以根据NSValue所包装的数据类型选择合适的方法来读取其值。