请考虑以下内容:
@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中启用一些相关的Clang错误或警告,以使其更安全吗?
更新。我不想创建另一个问题非常相似的问题。真烦人。看看:
NSArray<NSString*>* strings = @[@"Hello"];
for (NSNumber* num in strings)
{
[num unsignedIntegerValue];// unrecognized selector crash!!!!
}
甚至没有警告。什么...?在重构过程中不更改此类代码很容易。我真的很想让编译器警告我这种情况。