我正在编写一个访问 API 的客户端。API吐出这个:
Id: 33,
UserUrl: "https://example.com/username/profile",
Title: "I wanna give 'em the holy boot!",
IsOnline: "no"
我将 JSON 作为 NSDictionary 使用,并使用 setValuesForKeysWithDictionary: 将其转换为我的用户对象。我的 User.m 有自定义设置器来获取传入的 UserUrl 字符串并将其弯曲成 NSURL,如下所示:
- (void)setUserUrl:(NSString *)stringInput {
_UserUrl = [NSURL URLWithString:stringInput];
}
这工作正常。当我尝试对 BOOL 进行相同操作时,会收到警告:
'setIsSecret:' 实现中的参数类型冲突:'BOOL' (aka 'signed char') vs 'NSString *__strong'
- (void)setIsOnline:(NSString *)stringInput {
if ([stringInput isEqualToString:@"yes"])
_IsOnline = YES;
else
_IsOnline = NO;
}
用户.h
@interface Achievement : NSObject
@property (strong, nonatomic) NSNumber *Id;
@property (strong, nonatomic) NSURL *UserUrl;
@property (strong, nonatomic) NSString *Title;
@property (nonatomic) BOOL IsOnline;
@end
我的代码编译并运行良好,我只想知道为什么它警告我 BOOL 属性而不是 NSString 属性。这是一个 API 包装器,所以我不想隐藏警告。提前致谢。
更新rmaddy 有正确的答案。对于希望在未来做同样事情的任何人,创建一个自定义初始化程序来完成所有类型转换。