Создает ли target-c новую запись, когда ключ отсутствует в словаре, но доступен? Как в операторе std :: map [].
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
D[@10] = @"ten";
if (D[@1] == nil) // will it create an entry for D[@1]?
NSLog(@"Found with nil");
}
return 0;
}
Я думаю, что ответ НЕТ. Вы можете проверить это по приведенному ниже коду.
int main(int argc, char * argv[]) {
@autoreleasepool {
NSMutableDictionary<NSNumber *, NSString *> *D = [NSMutableDictionary new];
D[@10] = @"ten";
NSLog(@"%@", D); // { 10 = ten; } logged
if (D[@1] == nil) // will it create an entry for D[@1]?
NSLog(@"%@", D); // { 10 = ten; } logged. @1 key doesn't exist
}
}
Кроме того, вы должны взглянуть на документ Apple для objectForKey: метод.
Значение, связанное с aKey, или nil, если никакое значение не связано с aKey.
D[@1]
это синтаксис сахара [D objectForKey:@1]
, Таким образом, согласно документу, он вернет ноль, если никакое значение не связано с ключом 1
, Вот почему D[@1] == nil
Других решений пока нет …