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