iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
そもそも、クラス宣言にPublic/Privateがあるのは何に対してか?という気がしてきたのだが、Objective-Cで非公開。C言語でいうところのモジュール(ファイル)に閉じた変数/関数を宣言するにはどうするのか?が今回のお話。
ヘッダーファイル。
@interface MyClass : NSObject
@property (nonatomic, strong) クラス名 *公開プロパティ;
@property (nonatomic, assign, readonly) float value;
- (void)公開メソッド;
@end
.mファイル。
@interface MyClass ()
@property (nonatomic, strong) クラス名 *非公開プロパティ;
@property (nonatomic, assign, readwrite) float value;
- (void)非公開メソッド;
@end
@implementation Lisp
@synthesiz 公開プロパティ = _公開プロパティ;
@synthesiz 非公開プロパティ = _非公開プロパティ;
@synthesiz value = _value;
- (void)公開メソッド
{
}
- (void)非公開メソッド
{
}
@end
非公開にしたいインスタンス変数、プロパティ、メソッドを.mファイル内の名前が空のカテゴリで宣言すれば、非公開のインスタンス変数、プロパティ、メソッドになる。その際、ヘッダーファイルではreadonlyで宣言し、内部ではreadwriteにするという事も出来る。
著者は、これを匿名(無名)カテゴリと思っていたのだが、正確にはクラス拡張と呼ぶらしい。