Как заставить Xcode выдавать ошибку или предупреждение в случае общего несоответствия типов? - PullRequest
0 голосов
/ 18 января 2019

Пожалуйста, примите во внимание следующее:

@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!!!!
}

Даже не предупреждение. Что за ...? Очень легко оставить такой код без изменений во время рефакторинга. Мне бы очень хотелось, чтобы компилятор предупреждал меня о таких случаях, как этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...