Существуют ли предупреждения, позволяющие прекратить назначать литералы массива и словаря переменным с типичными типами, которые не совпадают?Objective-C Generics-Safe Array/Dictionary Literal
// I expect a warning here.
// I'm assigning an NSArray<NSNumber *> to an NSArray<NSString *>
NSArray<NSString *> *strings = @[@1,
@2,
@3,
];
// I expect a warning here.
// NSDictionary<NSNumber *, NSNumber *> to an
// NSDictionary<NSString *, NSString *>
NSDictionary<NSString *, NSString *> *stringsByString = @{@1 : @1,
@2 : @2,
@3 : @3,
};
Я создал новый проект IOS с Xcode версии 7.2 (7C68), и я не получил никаких предупреждений для вышеупомянутых назначений.
Я знаю, что я мог бы назначить создавать изменяемые коллекции и вручную присвоить каждое значение, и получить ожидаемые предупреждения:
NSMutableArray<NSString *> *strings = [NSMutableArray new];
[strings addObject:@1];
Несовместимые типы указателей отправки «NSNumber *» для параметра типа «NSString * _Nonnull»
NSMutableDictionary<NSString *, NSString *> *stringsByString = [NSMutableDictionary new];
stringsByString[@"1"] = @1;
Несовместимые типы указателей отправки «NSNumber * 'к параметру типа' NSString * _Nullable '
Но я надеялся на что-то более сжатое.
Весь этот вопрос более широк, чем просто позвонить -\[NSMutableDictionary setObject:forKey:\
which doesn't work.
stringsByString[@2] = @"2";
Если вы можете ссылаться на документацию или какое-либо официальное слово от кого-то из Apple (твит или письмо), я буду рад отметить это правильно. –