如何将一个Struct包装到NSObject中
这应该是微不足道的…我想,但我找不到如何将一个Structvariables包装到一个NSObject
。 有没有办法呢? 如果没有,我将如何去添加一个结构到NSMutableArray
?
谢谢。
嗯,尝试查看NSValue
在https://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已经存在。