39

这应该是微不足道的......我想,但我找不到如何将 Struct 变量包装到NSObject. 有没有办法做到这一点?如果没有,我将如何将结构添加到NSMutableArray?

谢谢。

4

3 回答 3

83

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

于 2011-04-17T07:43:34.560 回答
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];
于 2012-02-28T15:57:32.633 回答
0

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

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

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

+valueWithCGAffineTransform 从 iOS 2.0 就已经存在。

于 2015-05-06T02:09:38.413 回答