我知道这是一个新手问题,但我无法理解这个问题(或者真的,我无法让它工作)
所以我有我的.h
@interface
NSString *test;
@end;
@property NSString *test
和我的.m
...
@synthesize test;
...
但是我想要一个用于测试的自定义setter - 正确的语法是什么?
感谢
答案 0 :(得分:3)
首先,如果您计划test
,则无需声明变量@synthesize
,但如果您这样做,则需要将其置于大括号中。
其次,属性的声明需要在界面内:
@interface {
NSString *test;
}
@property (readwrite) NSString *test
@end;
最后,setter的语法是
-(void)setTest:(NSString*)test {
...
}
如果您选择覆盖getter,则约定为
-(NSString*)test {
return test;
}
答案 1 :(得分:2)
使用定义
简单创建方法- (void) setTest:(NSString*) new_value
当您尝试修改test属性的值时,将调用此方法(您可以根据其他属性名称进行更改)。
请记住,只有在尝试修改self.test(属性)时才会调用此方法 - 如果直接修改测试变量,则不会调用setTest。将非属性变量命名为其他内容(前面带有下划线_test
是常见的)是一种很好的做法,并让您的syntize语句引用它:
@synthesize test = _test;
这将访问self.test获取_test的值,并修改self.test调用setTest方法。如果要覆盖getter,则具有定义
- (NSString*) test
答案 2 :(得分:2)
如果您的自定义设置器的方法名称与setTest:
不同(假设属性名称为test
),则可以使用以下命令指定设置器:
@property(readwrite,setter=setShokolokobangoshay:) NSString *test;
然后,如果你有:
object.test = @"SomeValue";
它会自动“翻译”为:
[object setShokolokobangoshay:@"SomeValue"];
否则,您可以简单地提供setTest:
方法,它将自动用作属性的setter,即使您使用@synthesize
指令(在这种情况下,@synthesize
}指令只会实现一个getter)。