1

これが初心者の質問であることは知っていますが、これについて理解できません(または、実際には機能しません)

だから私は私の.hに持っています

@interface
NSString *test;
@end;

@property NSString *test

そして私の.mで

...
@synthesize test;
...

しかし、テスト用のカスタム セッターが必要です。正しい構文は何ですか?

ありがとう

4

3 に答える 3

3

testまず、変数を宣言する場合は宣言する必要はありませんが、宣言する@synthesize場合は中括弧で囲む必要があります。

次に、プロパティの宣言はインターフェイス内にある必要があります。

@interface {
    NSString *test;
}
@property (readwrite) NSString *test
@end;

最後に、セッターの構文は次のとおりです。

-(void)setTest:(NSString*)test {
    ...
}

ゲッターもオーバーライドすることを選択した場合、規則は次のようになります。

-(NSString*)test {
    return test;
}
于 2012-09-13T01:03:22.160 に答える
2

カスタム セッターのメソッド名がsetTest:(プロパティ名が であると仮定して) と異なるtest場合、次を使用してセッターを指定できます。

@property(readwrite,setter=setShokolokobangoshay:) NSString *test;

あなたが持っている場合:

object.test = @"SomeValue";

自動的に次のように「翻訳」されます。

[object setShokolokobangoshay:@"SomeValue"];

それ以外の場合は、単にsetTest:メソッドを提供するだけで、ディレクティブを使用しても、プロパティのセッターとして自動的に使用されます@synthesize(この場合、@synthesizeディレクティブはゲッターのみを実装します)。

于 2012-09-13T01:10:50.040 に答える
2

定義を使用してメソッドを簡単に作成する

- (void) setTest:(NSString*) new_value

これは、テスト プロパティの値を変更しようとしたときに呼び出されるメソッドです (他のプロパティ名に合わせて変更できます)。

このメソッドは、self.test (プロパティ) を変更しようとした場合にのみ呼び出されることに注意してください。テスト変数を直接変更すると、setTest は呼び出されません。非プロパティ変数に別の名前を付けることをお勧めします (アンダースコアを先頭に付けるの_testが一般的です)。合成ステートメントでそれを参照させます。

@synthesize test = _test;

これにより、self.test にアクセスして _test の値を取得し、self.test を変更して setTest メソッドを呼び出します。ゲッターをオーバーライドしたい場合、これには定義があります

- (NSString*) test
于 2012-09-13T01:02:35.187 に答える