はじめに
Objective-cで、作ったFrameworkを使ってもらうけど、とある変数はreadonlyにしたい場合があります。ただ、単純に@propertyでreadonlyにしても、Framework内でもreadonlyになってしまって、値代入ができません。
そんな時どうするかを説明したいと思います。
手順
1.Frameworkの利用する側から見えるヘッダクラスには、getメソッドだけ記述します。
(今回はSampleData.hとしました)
1 2 3 4 5 6 |
// SampleData.h /** * サンプル文字列を取得します * @return サンプル文字列 */ - (NSString*) sampleString; |
2..mファイルにgetメソッドを実装します。
1 2 3 4 5 |
// SampleData.m - (NSString*) sampleString { return _sampleString; } |
ここまでだと、当然ですが変数を宣言していないのでエラーになります。
3.「カテゴリ」を追加する。
これが今回重要なことなのですが、objcにはカテゴリとして、クラスに対して機能を追加できる仕組みがあります。 AAA+BBB.hみたいなやつです、たまに見ますよね。
SampleData+FrameworkPrivate.hという名前で、ヘッダファイルを一つ追加します、このヘッダはFrameworkを利用する側から 見えないようにします。
1 2 |
// SampleData+FrameworkPrivate.h @property (nonatomic) NSString *sampleString; |
これを2の.mファイルでimportします。
1 |
#import "SampleData+FrameworkPrivate.h" |
こうすることで、ヘッダを利用する側としては、1で作ったgetメソッドしか参照出来なくなります。 Framework内で利用する時は、1のヘッダではなく、3のSampleData+FrameworkPrivate.hをimportして使えばOKです。
最後に
ここまでやりたい人は限られてくると思いますが、調べても中々出てこなかったので書かせて頂きました。