@property
構文を使用して、パブリックに読み取り専用であるが、クラス内からプライベートに呼び出すことができるセッターを持つ合成プロパティを宣言したいと思います。
Objective-Cであるため、これは基本的にsetFoo:
メソッドが合成されることを意味しますが、クラス自体の外部で呼び出すと警告(認識されないセレクター)が発生します。警告をトリガーするには、プロパティreadonly
;を宣言する必要があります。クラス内でのみ利用可能な合成セッターを強制する方法はありますか?
あなたが探しているものはクラス拡張と呼ばれると思います。ヘッダーでプロパティを読み取り専用として宣言します。
@interface MyClass : NSObject {
}
@property (readonly, assign) NSInteger myInteger;
@end
次に、実装ファイルでクラス拡張を再宣言します。
@interface MyClass ()
@property (readwrite, assign) NSInteger myInteger;
@end
@implementation MyClass
@end
詳細については、Appleの ドキュメント をご覧ください
私は遅れる可能性がありますが、拡張子なしで私は次のテクニックを使用しました
@interface MyClass : NSObject {
NSString * name;
}
@property (readonly, strong) NSString * name;
@end
一方、実装ファイルでは
@implementation MyClass
@synthesize name;
- (id)initWithItems:(NSDictionary *)items {
self = [super init];
if(self)
{
name = @"abc";
}
return self;
}
@end
そうすることで、値が設定され、読み取り専用としてアクセス可能になります。ありがとう。