Objective-C判断id类型时出现“Messaging unqualified id”编译警告
解决“Messaging unqualified id”编译警告
这个警告的核心原因是:编译器无法确认id类型的对象是否实现了isKindOfClass:方法(尽管绝大多数OC对象都继承自NSObject并实现该方法,但编译器会做严格的类型检查)。
下面是几种可行的解决办法:
方法一:约束参数类型为id<NSObject>
将方法的参数类型从id改为id<NSObject>,明确告知编译器该对象遵循NSObject协议,必然响应isKindOfClass:方法:
+ (void)myMethod:(id<NSObject>)authenticationData { if ([authenticationData isKindOfClass:[NSArray class]]) { NSLog(@"NSArray"); } else if ([authenticationData isKindOfClass:[NSString class]]) { NSLog(@"NSString"); } else { NSLog(@"Unknown"); } }
方法二:临时强制类型转换
在调用isKindOfClass:前,将id对象强制转换为NSObject*,让编译器确认方法的合法性:
+ (void)myMethod:(id)authenticationData { if ([(NSObject*)authenticationData isKindOfClass:[NSArray class]]) { NSLog(@"NSArray"); } else if ([(NSObject*)authenticationData isKindOfClass:[NSString class]]) { NSLog(@"NSString"); } else { NSLog(@"Unknown"); } }
推荐方案
优先选择方法一,它从接口层面就规范了参数的类型要求,代码可读性和健壮性更强;方法二更适合临时修改单个调用点的场景。
内容的提问来源于stack exchange,提问作者h.and.h
相关产品推荐
相关产品推荐

