это должно быть тривиально… я думаю, но я не могу найти способ, как обернуть переменную Struct в NSObject
. Есть ли способ сделать это? Если нет, как мне добавить структуру в NSMutableArray
?
Спасибо.
это должно быть тривиально… я думаю, но я не могу найти способ, как обернуть переменную Struct в NSObject
. Есть ли способ сделать это? Если нет, как мне добавить структуру в NSMutableArray
?
Спасибо.
Хм, попробуйте посмотреть 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
Что-то вроде этого будет категорией, о которой говорит @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];
Используйте 1_
Из документов: «Создает новый объект значения, содержащий указанную структуру аффинного преобразования CoreGraphics».
CGAffineTransform fooAffineTransform = CGAffineTransformMakeScale(.5, .5);
[NSValue valueWithCGAffineTransform:fooAffineTransform];
+valueWithCGAffineTransform существует с iOS 2.0.