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;
}

しかし、他のクラスが NSString 以外で setWert: を呼び出しても構わない場合は、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 に答える