Пожалуйста, примите во внимание следующее:
@interface Test : NSObject
+ (void)testBlock:(void(^)(NSArray<NSString*>*))aBlock;
@end
@implementation Test
+ (void)testBlock:(void (^)(NSArray<NSString *> *))aBlock
{
aBlock(@[@"Hello", @"World"]);
}
@end
и затем:
[Test testBlock:^(NSArray<NSNumber*>* arr){
[arr.firstObject unsignedIntegerValue];
}];
это сбой, но компилятор даже не думает предупредить меня, тогда как я хотел бы получить ошибку. Это вообще возможно? Есть ли какая-либо соответствующая ошибка Clang или предупреждение, которое я мог бы включить в XCode, чтобы сделать его более безопасным?
UPDATE. Я не хочу создавать другой вопрос с очень похожей проблемой. Это действительно раздражает. Взгляните:
NSArray<NSString*>* strings = @[@"Hello"];
for (NSNumber* num in strings)
{
[num unsignedIntegerValue];// unrecognized selector crash!!!!
}
Даже не предупреждение. Что за ...? Очень легко оставить такой код без изменений во время рефакторинга. Мне бы очень хотелось, чтобы компилятор предупреждал меня о таких случаях, как этот.