Еще одним вариантом является (ab) использование NSDictionary с одной записью для хранения пары - поскольку NSDictionary теперь может быть определен для принудительного ввода типизированных «ключ» и «значение», а также поддерживает литералы как синтаксический сахар. Недостаток - пара может содержать только NSObjects (ссылки на экземпляры), а не примитивные значения.
Образец будет выглядеть так:
typedef NSDictionary<NSString *, NSDate *> *Pair;
А потом в вашем коде:
Pair myPair = @{@"my name": [NSDate date]};
Pair myOtherPair = @{@"his name": [NSDate date]};
NSArray<Pair> *myArrayOfPairs = @[myPair, myOtherPair];
Перейдите и распечатайте результаты:
NSLog(@"%@", myArrayOfPairs);
и это очень похоже на то, что вы ожидаете.
2019-03-18 16:08:21.740667+0200 TesterApp[23135:23269890] (
{
"my name" = "2019-03-18 14:08:21 +0000";
},
{
"his name" = "2019-03-18 14:08:21 +0000";
}
)
Время окупаемости наступает, когда вы пытаетесь извлечь значения из так называемой «пары». На самом деле вы должны выкопать эту единственную запись из NSDictionary, а не по ее «Ключу», как обычно, но при условии, что есть только одна запись, например:
Pair somePair = myArrayOfPairs.lastObject;
NSString *name = somePair.allKeys.firstObject;
NSDate *date = somePair.allValues.firstObject;
NSLog(@"name: %@ date: %@", name, date);
что в итоге дает:
name: his name date: Mon Mar 18 16:16:43 2019
Я не особенно рекомендую эту альтернативу, но она имеет свои тонкости и преимущества.