Objective-C Language
カテゴリー
サーチ…
構文
@interface ClassName(categoryName)// ClassNameは拡張するクラスです
//メソッドとプロパティの宣言
@終わり
備考
メソッド名の衝突を避けるために、接頭辞(例ではxyz_
など)を使用することをお勧めします。同じ名前のメソッドが存在する場合、実行時にどのメソッドが使用されるかは未定義です。
シンプルなカテゴリ
NSArray上の単純なカテゴリのインターフェイスと実装.Filterという名前は、数値をフィルタリングする単一のメソッドです。
将来のNSArray
メソッドを上書きしないように、メソッドにプレフィックス( PF
)を追加することをおNSArray
ます。
@interface NSArray (PFFilter)
- (NSArray *)pf_filterSmaller:(double)number;
@end
@implementation NSArray (PFFilter)
- (NSArray *)pf_filterSmaller:(double)number
{
NSMutableArray *result = [NSMutableArray array];
for (id val in self)
{
if ([val isKindOfClass:[NSNumber class] && [val doubleValue] >= number)
{
[result addObject:val];
}
}
return [result copy];
}
@end
クラスメソッドの宣言
ヘッダーファイルUIColor+XYZPalette.h
:
@interface UIColor (XYZPalette)
+(UIColor *)xyz_indigoColor;
@end
実装UIColor+XYZPalette.m
:
@implementation UIColor (XYZPalette)
+(UIColor *)xyz_indigoColor
{
return [UIColor colorWithRed:75/255.0f green:0/255.0f blue:130/255.0f alpha:1.0f];
}
@end
カテゴリ付きのプロパティを追加する
Objective-Cランタイムの機能である関連オブジェクトを使用して、プロパティをカテゴリに追加できます。
プロパティ宣言があることに注意してくださいretain, nonatomic
への最後の引数に一致objc_setAssociatedObject
。説明を参照するには、オブジェクトを別の既存のオブジェクトにアタッチするを参照してください。
#import <objc/runtime.h>
@interface UIViewController (ScreenName)
@property (retain, nonatomic) NSString *screenName;
@end
@implementation UIViewController (ScreenName)
@dynamic screenName;
- (NSString *)screenName {
return objc_getAssociatedObject(self, @selector(screenName));
}
- (void)setScreenName:(NSString *)screenName {
objc_setAssociatedObject(self, @selector(screenName), screenName, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
プロトコルに準拠
プロトコルを標準クラスに追加して、機能を拡張することができます。
@protocol EncodableToString <NSObject>
- (NSString *)toString;
@end
@interface NSDictionary (XYZExtended) <EncodableToString>
@end
@implementation NSDictionary (XYZExtended)
- (NSString *)toString {
return self.description;
}
@end
XYZ
でプロジェクトの接頭辞
XCodeでカテゴリを作成する
カテゴリは、実際のオブジェクトをサブクラス化または変更することなく、オブジェクトに特別な機能を追加する機能を提供します。
たとえば、カスタムフォントを設定したいとします。 UIFont
クラスに機能を追加するカテゴリを作成しましょう。あなたのXCodeプロジェクトを開き、 File
- > New
- > File
をクリックしてObjective-C file
を選択し、次に「次へ」をクリックしてカテゴリ名を入力します。「CustomFont」と入力し、UIFontとしてカテゴリとクラスを選択してから「次へ」をクリックします。 "
カテゴリメソッドを宣言する: -
新しいカテゴリのヘッダーファイルを表示するには、「UIFont + CustomFonts.h」をクリックします。メソッドを宣言するために、次のコードをインターフェイスに追加します。
@interface UIFont (CustomFonts)
+(UIFont *)productSansRegularFontWithSize:(CGFloat)size;
@end
カテゴリメソッドを実装する:
カテゴリの実装ファイルを表示するには、 "UIFont + CustomFonts.m"をクリックします。 ProductSansRegular Fontを設定するメソッドを作成するには、次のコードを追加します。
+(UIFont *)productSansRegularFontWithSize:(CGFloat)size{
return [UIFont fontWithName:@"ProductSans-Regular" size:size];
}
あなたのカテゴリをインポートする
#import "UIFont+CustomFonts.h"
Labelフォントを設定する
[self.label setFont:[UIFont productSansRegularFontWithSize:16.0]];