这应该是微不足道的...我想,但是我找不到如何将Struct变量包装到NSObject
中的方法。有没有办法这样做?如果没有,我将如何将结构添加到NSMutableArray
?
感谢。
答案 0 :(得分:78)
嗯,请尝试查看https://developer.apple.com/documentation/foundation/nsvalue
处的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
答案 1 :(得分:13)
类似这样的类别@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];
答案 2 :(得分:0)
使用+ (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
从文档:“创建一个包含指定的CoreGraphics仿射变换结构的新值对象。”
CGAffineTransform fooAffineTransform = CGAffineTransformMakeScale(.5, .5);
[NSValue valueWithCGAffineTransform:fooAffineTransform];
+ valueWithCGAffineTransform自iOS 2.0起就已存在。