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;

最后,setter 的语法是

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

如果您也选择覆盖 getter,则约定是

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

简单地用定义创建一个方法

- (void) setTest:(NSString*) new_value

这是当您尝试修改测试属性的值时将调用的方法(您可以根据其他属性名称进行更改)。

请记住,仅当您尝试修改 self.test(属性)时才会调用此方法 - 如果您直接修改测试变量,则不会调用 setTest。将非属性变量命名为其他名称是一种很好的做法(_test常用下划线开头),并让您的综合语句引用它:

@synthesize test = _test;

这将访问 self.test 获取 _test 的值,并修改 self.test 调用您的 setTest 方法。如果你想覆盖 getter,这有定义

- (NSString*) test
于 2012-09-13T01:02:35.187 回答
2

如果您的自定义设置器的方法名称不同于setTest:(假设属性名称为test),您可以使用以下方法指定设置器:

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

那么如果你有:

object.test = @"SomeValue";

它将自动“翻译”为:

[object setShokolokobangoshay:@"SomeValue"];

否则,您可以简单地提供一个setTest:方法,它会自动用作属性的设置器,即使您使用@synthesize指令(在这种情况下,@synthesize指令将只实现一个 getter)。

于 2012-09-13T01:10:50.040 回答