目标C – 无法工作@属性/ @综合设置和获得者?
我知道这是一个新手问题,但我不能得到我的头(或真的,我不能得到它的工作)
所以我有我的
@interface NSString *test; @end; @property NSString *test
在我的
... @synthesize test; ...
但我想要一个自定义的testing器 – 什么是正确的语法?
谢谢
首先,如果您计划使用@synthesize
,则不需要声明variablestest
,但是如果您这样做,则需要将其放在花括号中。
其次,财产的声明需要在界面之内:
@interface { NSString *test; } @property (readwrite) NSString *test @end;
最后,setter的语法是
-(void)setTest:(NSString*)test { ... }
如果你select重写getter,那么约定是
-(NSString*)test { return test; }
简单的用定义创build一个方法
- (void) setTest:(NSString*) new_value
这是在您尝试修改testing属性的值时将被调用的方法(您可以根据其他属性名称更改此属性)。
请记住,只有当您尝试修改self.test(属性)时才会调用此方法 – 如果直接修改testingvariables,则不会调用setTest。 将非属性variables命名为其他名称是很好的做法(前面带有下划线_test
是常见的),并将您的合成语句引用它:
@synthesize test = _test;
这将访问self.test得到_test的值,并修改self.test调用你的setTest方法。 如果你想重写getter,这就有了定义
- (NSString*) test
如果你的自定义setter有一个不同于setTest:
的方法名(假设属性名是test
),你可以使用下面的方法指定setter:
@property(readwrite,setter=setShokolokobangoshay:) NSString *test;
那么如果你有:
object.test = @"SomeValue";
它会自动“翻译”到:
[object setShokolokobangoshay:@"SomeValue"];
否则,即使使用@synthesize
指令(在这种情况下,@ @synthesize
指令只会实现一个getter),您也可以简单地提供一个setTest:
方法,并将自动用作该属性的setter。