Sök…


Syntax

  • @interface ClassName (kategorinamn) // ClassName är den klass som ska utökas

  • // Metod- och egendomsdeklarationer

  • @slutet

Anmärkningar

För att undvika xyz_ i xyz_ rekommenderas det att använda prefix (som xyz_ i exemplet). Om det finns metoder med samma namn, definieras det inte vilket som ska användas under körtiden.

Enkel kategori

Gränssnitt och implementering av en enkel kategori på NSArray, med namnet Filter, med en enda metod som filtrerar siffror.

Det är bra att lägga till ett prefix ( PF ) till metoden för att säkerställa att vi inte skriver över några framtida NSArray metoder.

@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

Förklarar en klassmetod

UIColor+XYZPalette.h :

@interface UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor;

@end

och implementering 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

Lägga till en fastighet med en kategori

Egenskaper kan läggas till med kategorier med tillhörande objekt, en funktion i Objekt-C-runtime.

Observera att fastighetsdeklarationen för retain, nonatomic matchar det sista argumentet till objc_setAssociatedObject . Se Bifoga objekt till ett annat befintligt objekt för förklaringar.

#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

I enlighet med protokoll

Du kan lägga till protokoll till standardklasser för att utöka deras funktionalitet:

@protocol EncodableToString <NSObject>
- (NSString *)toString;
@end

@interface NSDictionary (XYZExtended) <EncodableToString>
@end

@implementation NSDictionary (XYZExtended)
- (NSString *)toString {
    return self.description;
}
@end

där XYZ ditt projekt prefix

Skapa en kategori på XCode

Kategorier ger möjlighet att lägga till lite extra funktionalitet till ett objekt utan att underklassificera eller ändra det faktiska objektet.

Vi vill till exempel ställa in några anpassade teckensnitt. Låt oss skapa en kategori som lägger till funktionalitet i UIFont klassen. Öppna ditt XCode-projekt, klicka på File -> New -> File och välj Objective-C file , klicka på Nästa ange ditt kategorin namn säga "CustomFont" välj filtyp som kategori och klass som UIFont och klicka sedan på "Nästa" följt av "Skapa. "

ange bildbeskrivning här

ange bildbeskrivning här

Förklara kategorimetoden: -

Klicka på "UIFont + CustomFonts.h" för att se rubrikfilen för den nya kategorin. Lägg till följande kod i gränssnittet för att deklarera metoden.

@interface UIFont (CustomFonts)

+(UIFont *)productSansRegularFontWithSize:(CGFloat)size;

@end

Implementera nu kategorimetoden: -

Klicka på "UIFont + CustomFonts.m" för att se kategorins implementeringsfil. Lägg till följande kod för att skapa en metod som ställer in ProductSansRegular Font.

+(UIFont *)productSansRegularFontWithSize:(CGFloat)size{
    
    return [UIFont fontWithName:@"ProductSans-Regular" size:size];
    
}

Importera din kategori

#import "UIFont+CustomFonts.h"

Ställ nu Label-typsnittet

[self.label setFont:[UIFont productSansRegularFontWithSize:16.0]];


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow