How to wrap a Struct into NSObject
this is supposed to be trivial… I think, but I can't find a way how to wrap a Struct variable into an NSObject
. Is there a method to do so? If not, how would I go about adding a struct into an NSMutableArray
?
Thanks.开发者_StackOverflow社区
Hm, try to look at the NSValue
at https://developer.apple.com/documentation/foundation/nsvalue
You can use it like
struct aStruct
{
int a;
int b;
};
typedef struct aStruct aStruct;
Then sort of "wrap" it to an NSValue
object like:
aStruct struct; struct.a = 0; struct.b = 0;
NSValue *anObj = [NSValue value:&struct withObjCType:@encode(aStruct)];
NSArray *array = @[anObj];
To pull the struct out from NSValue
use:
NSValue *anObj = [array firstObject];
aStruct struct;
[anObj getValue:&struct];
I guess later on, you can have a category from NSValue to make that better =D
Something like like this would be the category @Rpranata is talking about :)
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
Usage:
// Boxing
Pair pair; pair.val = 2; pair.count = 1;
NSValue *value = [NSValue valueWithPair:pair];
// Unboxing
NSValue value = ...
Pair anotherPair = [value pairValue];
Use + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
From the docs: "Creates a new value object containing the specified CoreGraphics affine transform structure."
CGAffineTransform fooAffineTransform = CGAffineTransformMakeScale(.5, .5);
[NSValue valueWithCGAffineTransform:fooAffineTransform];
+valueWithCGAffineTransform has existed since iOS 2.0.
精彩评论