Can I not do this in objective 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
I am using the class like this:
Foo *foo = [[Foo alloc] init];
foo.fruitCount = 7;
However my getter and setter's are not getting called. If I instead write:
@property (getter=getFruitCount, setter=setFruitCount:) int fruitCount;
My getter gets called however the setter still doesn't get called. What am I missing?
Your syntax is a bit off... to define your own implementation for property accessors in your example, use the following:
@implementation Foo
@dynamic fruitCount;
// ⚠ NOTE that below has NOT "getFruitCount" name.
- (int) fruitCount {
return apple + banana;
}
- (void) setFruitCount :(int)value {
apple = value / 2;
banana = value / 2;
}
@end
Using @synthesize
tells the compiler to make default accessors, which you obviously don't want in this case. @dynamic
indicates to the compiler that you will write them. There used to be a good example in Apple's documentation, but it somehow got destroyed in their 4.0 SDK update... Hope that helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With