これは、フレンド クラスの典型的なケースです。ObjC にはフレンド クラスの言語サポートがありませんが、作成は難しくありません。
まず、モデルへのパブリック インターフェイスで properties を宣言する必要がありますreadonly
。その部分は明らかなはずです。
次に、モデルの内部で、クラス拡張で必要に応じてプロパティを読み書きできるようにします。(これは、ObjC に慣れていれば明らかなはずです。明らかでない場合は、回答を更新します。)
さて、残りの話です。「Friend」カテゴリ (または「Writer」または「Protected」など、意味のある名前) を作成します。
@interface ModelObject (Friend)
- (void)setSomeProperty:(id)someProperty;
@end
これは、このカテゴリをインポートした人に、setSomeProperty:
存在することを知らせるだけです。これで、コントロールはこのファイル ( ) をインポートし、ModelObject+Friend.h
プロパティを設定できるようになります。他の全員がインポートModelObject.h
し、プロパティは読み取り専用に見えます。
これは、もちろんプロパティだけでなく、アクセスする必要があるものすべてに対して機能します。私はよく、不変クラスを作成してから、「フレンドのみ」のinitWithX:andY:andZ:
メソッドを作成します。