サーチ…


構文

  • @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]];


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow