Эквивалент пары C ++ STL-контейнеров ”В Objective-C?

Я новичок в Objective-C, поэтому, пожалуйста, не судите меня слишком сильно. Мне было интересно: есть ли эквивалент контейнера пары C ++ STL, который я могу использовать в Objective-C?

Я хочу создать массив, содержащий NSInteger, связанный с NSBool. Я знаю, что могу использовать массив, в котором каждая запись является NSDictionary с одним значением ключа, но я нахожу это немного излишним.

Любые идеи?

Спасибо.

15
задан Soo Wei Tan 2 May 2012 в 21:06
поделиться

4 ответа

Вы можете использовать STL в Objective-C++. Все, что вам нужно сделать, это изменить расширение вашего .m файла на .mm, и я бы также посоветовал вам использовать #import вместо #include. Таким образом, вы сможете использовать свой парный STL-контейнер.

7
ответ дан 1 December 2019 в 03:04
поделиться

Используя анонимные struct и литералы struct, вы можете сделать что-то вроде

NSValue * v = [NSValue valueWithBytes:(struct {NSInteger i; bool b;}){i,b} objCType:(struct {NSInteger i; bool b;})];

и затем прочитать,

struct {NSInteger i; bool b;} foo;
[v getValue:&foo];

Хотя, если вы дадите имя своему struct, будет немного чище.

1
ответ дан 1 December 2019 в 03:04
поделиться

Как насчет категории Pair на NSNumber, которая использует связанные объекты, что-то вроде код ниже (непроверенный, может потребоваться iOS4, поскольку я не уверен, когда были представлены связанные объекты).

#import <objc/runtime.h>

@implementation NSNumber(Pair)

#define PAIR_KEY 'p'

- (NSNumber *) pairNumber:(NSNumber *)second
{
    char secondKey = PAIR_KEY;
    objc_setAssociatedObject(self, &secondKey, second, OBJC_ASSOCIATION_RETAIN);
    return self;
}

- (NSNumber *) pairedNumber
{
    char secondKey = PAIR_KEY;
    NSNumber *associatedObject = (NSNumber *)objc_getAssociatedObject(self, &secondKey);    
    return associatedObject;
}

@end

Вы бы использовали это так:

BOOL myBool = NO;

NSNumber *storedBool = [NSNumber numberWithBool:myBool];

[myOtherNumber pairNumber:storedBool];

И чтобы получить это:

NSNumber *boolNumber = [myOtherNumber pairedNumber];
0
ответ дан 1 December 2019 в 03:04
поделиться

Вы можете написать свой собственный объект структуры данных - для такого простого случая это будет довольно просто:

@interface Pair : NSObject 
{
    NSInteger integer;
    BOOL      boolean;
}
@property (nonatomic, assign) integer;
@property (nonatomic, assign) boolean;
@end

И соответствующую реализацию, тогда вы без проблем засунете свои объекты Pair в NSArray.

16
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: