Reputation: 54040
I'd like to use the @property
syntax to declare a synthesized property that is publicly readonly but has a setter that can be called privately from within the class.
Since it's Objective-C, this basically means that the setFoo:
method would be synthesized, but calling it outside of the class itself would result in a warning (unrecognized selector). To trigger the warning I have to declare the property readonly
; is there any way to force a synthesized setter that is only available within the class?
Upvotes: 69
Views: 25664
Reputation: 568
I might be late, but without extension i did using the following technique
@interface MyClass : NSObject {
NSString * name;
}
@property (readonly, strong) NSString * name;
@end
on the other hand in implementation file
@implementation MyClass
@synthesize name;
- (id)initWithItems:(NSDictionary *)items {
self = [super init];
if(self)
{
name = @"abc";
}
return self;
}
@end
doing so it will set your value and will be accessible as readonly. Thanks.
Upvotes: 1
Reputation: 2358
I think what you're looking for are called class extensions. You would declare the property read-only in the header:
@interface MyClass : NSObject {
}
@property (readonly, assign) NSInteger myInteger;
@end
Then redeclare in your class extension in the implementation file:
@interface MyClass ()
@property (readwrite, assign) NSInteger myInteger;
@end
@implementation MyClass
@end
For more check out Apple's documentation
Upvotes: 118