Как обернуть Структуру в NSObject - PullRequest
38 голосов
/ 17 апреля 2011

это должно быть тривиально ... я думаю, но я не могу найти способ, как обернуть переменную Struct в NSObject. Есть ли способ сделать это? Если нет, то как мне добавить структуру в NSMutableArray?

Спасибо.

Ответы [ 3 ]

78 голосов
/ 17 апреля 2011

Хм, попробуйте взглянуть на 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

13 голосов
/ 28 февраля 2012

Примерно так будет в категории @ 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];
0 голосов
/ 06 мая 2015

Использование + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;

Из документов: «Создает новый объект значения, содержащий указанную структуру аффинного преобразования CoreGraphics.»

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

+ valueWithCGAffineTransform существует с iOS 2.0.

...