Objective-c-extensions
提供:Dev Guides
Objective-C拡張
クラス拡張はカテゴリとある程度類似していますが、コンパイル時にソースコードを持っているクラスにのみ追加できます(クラスはクラス拡張と同時にコンパイルされます)。
クラス拡張によって宣言されたメソッドは、元のクラスの実装ブロックに実装されているため、たとえば、NSStringのようなCocoaまたはCocoa Touchクラスなどのフレームワーククラスでクラス拡張を宣言することはできません。
拡張機能は、実際にはカテゴリ名のないカテゴリです。 しばしば*匿名カテゴリ*と呼ばれます。
拡張を宣言する構文は、標準のObjective-Cクラスの説明と同様に@interfaceキーワードを使用しますが、サブクラスからの継承を示すものではありません。 代わりに、以下に示すように、括弧を追加するだけです-
拡張機能の特性
- ソースコードの元の実装があるクラスに対してのみ、拡張機能をクラスに対して宣言することはできません。
- 拡張機能は、クラスに固有のプライベートメソッドとプライベート変数を追加します。 *拡張内で宣言されたメソッドまたは変数は、継承されたクラスからもアクセスできません。
拡張機能の例
拡張機能を持つクラスSampleClassを作成しましょう。 拡張機能では、プライベート変数internalIDを用意します。
次に、internalIDの処理後にexternalIDを返すメソッドgetExternalIDを用意します。
以下に例を示しますが、これはオンラインコンパイラでは機能しません。
プログラムをコンパイルして実行すると、次の結果が得られます。
上記の例では、internalIDが直接返されないことがわかります。 ここでは、UNIQUEINTERNALKEYを削除し、メソッドgetExternalIDで残りの値のみを使用できるようにします。
上記の例では文字列操作を使用していますが、暗号化/復号化などの多くの機能を使用できます。