геттер и сеттеры не работают цель c - PullRequest
4 голосов
/ 27 июля 2011

Разве я не могу сделать это в цели c?

@interface Foo : NSObject {
     int apple;
     int banana;         
}

@property int fruitCount;
@end

@implementation Foo
@synthesize fruitCount; //without this compiler errors when trying to access fruitCount

-(int)getFruitCount {
      return apple + banana;
}

-(void)setFruitCount:(int)value {
      apple = value / 2;
      banana = value / 2;
}

@end

Я использую такой класс:

Foo *foo = [[Foo alloc] init];
foo.fruitCount = 7;

Однако мои геттеры и сеттеры не получают вызовов. Если я вместо этого напишу:

 @property (getter=getFruitCount, setter=setFruitCount:) int fruitCount;

Мой геттер вызывается, но сеттер все равно не вызывается. Чего мне не хватает?

1 Ответ

9 голосов
/ 27 июля 2011

Ваш синтаксис немного отключен ... чтобы определить свою собственную реализацию для методов доступа к свойству в вашем примере, используйте следующее:

@implementation Foo
@dynamic fruitCount;

-(int)fruitCount {
   return apple + banana;
}
-(void)setFruitCount:(int)value {
      apple = value / 2;
      banana = value / 2;
}

@end

Использование @synthesize указывает компилятору создавать методы доступа по умолчанию, что в данном случае вам явно не нужно. @dynamic указывает компилятору, что вы их напишите. Раньше был хороший пример в документации Apple, но он каким-то образом разрушился в их обновлении 4.0 SDK ... Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...