如何将Struct包装到NSObject中

Gen*_*ode 38 iphone struct nsmutablearray nsvalue

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

谢谢.

Rpr*_*ata 78

嗯,尝试一下NSValuehttps://developer.apple.com/documentation/foundation/nsvalue

你可以像使用它一样

struct aStruct
{
    int a;
    int b;
};
typedef struct aStruct aStruct;
Run Code Online (Sandbox Code Playgroud)

然后将它"包装"到一个NSValue对象,如:

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

NSValue使用中拉出结构:

NSValue *anObj = [array firstObject];
aStruct struct;
[anObj getValue:&struct];
Run Code Online (Sandbox Code Playgroud)

我想稍后,你可以从NSValue中获得一个更好的类别= D.


nac*_*o4d 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
Run Code Online (Sandbox Code Playgroud)

用法:

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

// Unboxing
NSValue value = ...
Pair anotherPair = [value pairValue];
Run Code Online (Sandbox Code Playgroud)