0

我有一个内部必须是不同类型的对象,但我总是想以字符串的形式返回。所以我将对象声明为“id”并编写了一个始终返回 NSString* 的 getter 方法。一切正常,XCode 按预期抱怨“属性类型'X'与访问器类型'setX:'不匹配”。既然我确实想要这种行为,那么有没有人知道如何告诉 XCode 我确实想要这种行为,并且不想一直看到这个警告?有点像未使用变量的“__unused”指令?

谢谢!最大限度

编辑:这是代码

。H

@property (strong,nonatomic) id wert;
- (void) setWert:(NSString *)value;
- (NSString *) wert;

.m

 @synthesize wert;

- (void) setWert:(NSString *)value
{
        wert = value;
}

- (NSString *) wert
{
        return wert;
}
4

2 回答 2

0

问题在于以下几行:

@interface TestClass : NSObject

@property (strong, nonatomic) id wert;

- (void) setWert:(NSString *)value;
- (NSString *) wert;

@end

本质上,该@property符号是声明访问器方法的简写(诚然,具有一些属性)。所以在这里先声明为id,然后声明为 NSString 是没有意义的。确定要为 wert 公开的类型,并将其用于属性声明。我建议:

@interface TestClass : NSObject

@property (strong, nonatomic) id wert;

@end

此外,在 中.m,您首先 @synthesize 属性,然后覆盖 getter 和 setter。这意味着您从 @synthesize 获得的唯一东西是实例变量。

您也可以在 @implementation 块中声明实例变量。这将是您声明内部类型的好地方:

@implementation TestClass
{
    NSString *wert;
}

但是如果你对其他类调用 setWert: 感到高兴,除了 NSString 之外,你不应该更改 setter 的类型声明。这样做会假设这value是一个 NSString。所以你的访问器应该是这样的:

- (void) setWert:(id)value
{
    // store wert as an NSString
}

- (id) wert
{
    // return wert as the original type
}

@end
于 2012-04-24T12:39:18.097 回答
-1

设置NSString *to 和idtyped 属性不会导致警告,但是将idtyped var 设置为NSString *属性将...您可以使用 typecast 解决...

id someVar = @"string";
someObject.setStringProperty = (NSString *)someVar;
于 2012-04-23T22:47:37.170 回答