Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Objective-C property that is readonly publicly, but has a private setter

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?

like image 521
Adam Ernst Avatar asked Feb 15 '11 18:02

Adam Ernst


2 Answers

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

like image 177
Sean Rich Avatar answered Oct 21 '22 21:10

Sean Rich


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.

like image 24
Majid Bashir Avatar answered Oct 21 '22 20:10

Majid Bashir