代码之家  ›  专栏  ›  技术社区  ›  Andrey Chernukha

如果泛型类型不匹配,如何使Xcode产生错误或警告?

  •  3
  • Andrey Chernukha  · 技术社区  · 7 年前

    请考虑以下事项:

    @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];
        }];
    

    这是一个崩溃,但编译器甚至不想警告我,而我想得到一个错误。有可能吗?为了使Xcode更安全,我是否可以在Xcode中启用一些相关的叮当错误或警告?

    使现代化我不想用一个非常类似的问题来制造另一个问题。这真烦人。看看:

    NSArray<NSString*>* strings = @[@"Hello"];
    
    for (NSNumber* num in strings)
    {
        [num unsignedIntegerValue];// unrecognized selector crash!!!!
    }
    

    连警告都没有。什么。。。?在重构过程中,让这样的代码保持不变是很容易的。我真的很想提醒我类似的情况。

    0 回复  |  直到 7 年前