[英]Objective-C: Custom setter warnings for property type conversion
我正在編寫一個使用API的客戶端。 API吐出以下內容:
Id: 33,
UserUrl: "https://example.com/username/profile",
Title: "I wanna give 'em the holy boot!",
IsOnline: "no"
我將JSON作為NSDictionary使用,並使用setValuesForKeysWithDictionary:將其轉換為User對象。 我的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;
}
User.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包裝器的,因此我不希望不要掩蓋警告。 提前致謝。
UPDATE rmaddy具有正確的答案。 對於希望將來做同樣事情的任何人,請創建一個自定義初始化程序來進行所有類型轉換。
您聲明IsOnline
屬性具有BOOL
類型,但是setIsOnline:
方法采用NSString *
參數。 它必須是BOOL
參數。
請記住, IsOnline
屬性會生成synthesize方法:
- (BOOL)IsOnline;
- (void)setIsOnline:(BOOL)value;
與其他語言不同,Objective-C不支持方法重載。 參數的數據類型不是方法名稱的一部分。 你的:
- (void)setIsOnline:(NSString *)value
方法與期望的方法沖突。
由於屬性類型為NSURL *
但是您的setUserUrl:
方法也應該遇到相同的錯誤,但是您的方法使用NSString *
。 我不確定您為什么沒有這個問題。
如果要使用單獨的方法來設置給定其他類型的屬性,則應使用與標准屬性設置器方法名稱不同的方法名稱。
旁注-變量,屬性和方法名稱以小寫字母而不是大寫字母開頭是標准做法。 只有類應該以大寫字母開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.