gpt4 book ai didi

ios - Objective-C:属性类型转换的自定义 setter 警告

转载 作者:行者123 更新时间:2023-11-29 13:14:04 25 4
gpt4 key购买 nike

我正在编写一个访问 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 有自定义 setter 来获取传入的 UserUrl 字符串并将其弯曲成 NSURL,如下所示:

- (void)setUserUrl:(NSString *)stringInput  {
_UserUrl = [NSURL URLWithString:stringInput];
}

这很好用。当我尝试对 BOOL 进行相同操作时,我收到警告:

“setIsSecret:”实现中的参数类型冲突:“BOOL”(又名“signed char”)与“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 的答案是正确的。对于希望在未来做同样事情的任何人,创建一个自定义初始化程序来完成所有类型转换。

最佳答案

您将 IsOnline 属性声明为 BOOL 类型,但您的 setIsOnline: 方法采用 NSString * 参数。它需要是一个 BOOL 参数。

请记住,IsOnline 属性会导致合成方法:

- (BOOL)IsOnline;

- (void)setIsOnline:(BOOL)value;

与其他语言不同,Objective-C 不支持方法重载。参数的数据类型不是方法名称的一部分。你的:

- (void)setIsOnline:(NSString *)value

方法与期望的冲突。

你的 setUserUrl: 方法也应该得到同样的错误,因为属性类型是 NSURL * 但你的方法采用 NSString *。我不确定为什么你对那个没有问题。

如果您想要一个单独的方法来设置给定不同类型的属性,那么您应该有一个不同于标准属性 setter 方法名称的方法名称。

旁注 - 标准做法是变量、属性和方法名称以小写字母开头,而不是大写字母。只有类应该以大写字母开头。

关于ios - Objective-C:属性类型转换的自定义 setter 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com