如何将一个Struct包装到NSObject中

这应该是微不足道的…我想,但我找不到如何将一个Structvariables包装到一个NSObject 。 有没有办法呢? 如果没有,我将如何去添加一个结构到NSMutableArray

谢谢。

嗯,尝试查看NSValuehttps://developer.apple.com/documentation/foundation/nsvalue

你可以使用它

 struct aStruct { int a; int b; }; typedef struct aStruct aStruct; 

然后,将其“包装”到一个NSValue对象,如:

 aStruct struct; struct.a = 0; struct.b = 0; NSValue *anObj = [NSValue value:&struct withObjCType:@encode(aStruct)]; NSArray *array = @[anObj]; 

NSValue使用下拉结构:

 NSValue *anObj = [array firstObject]; aStruct struct; [anObj getValue:&struct]; 

我想以后,你可以从NSValue有一个类别,使更好= D

像这样的事情将是@Rpranata谈论的类别:)

 struct _Pair { short val; short count; }; typedef struct _Pair Pair; @interface NSValue (Pair) + (id)valueWithPair:(Pair)pair; - (Pair)pairValue; @end @implementation NSValue (Pair) + (id)valueWithPair:(Pair)pair { return [NSValue value:&pair withObjCType:@encode(Pair)]; } - (Pair)pairValue { Pair pair; [self getValue:&pair]; return pair; } @end 

用法:

 // Boxing Pair pair; pair.val = 2; pair.count = 1; NSValue *value = [NSValue valueWithPair:pair]; // Unboxing NSValue value = ... Pair anotherPair = [value pairValue]; 

使用+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;

从文档:“创build一个包含指定CoreGraphics仿射变换结构的新值对象”。

 CGAffineTransform fooAffineTransform = CGAffineTransformMakeScale(.5, .5); [NSValue valueWithCGAffineTransform:fooAffineTransform]; 

自iOS 2.0以来,+ valueWithCGAffineTransform已经存在。