Szukaj…


Składnia

  • @ Interfejs NazwaNazwy (kategoriaNazwa) // NazwaNazwa to klasa, która ma zostać rozszerzona

  • // Deklaracje metod i właściwości

  • @koniec

Uwagi

Aby uniknąć kolizji nazw metod, zaleca się stosowanie prefiksów (np. xyz_ w przykładzie). Jeśli istnieją metody o tej samej nazwie, nie jest zdefiniowane, która z nich zostanie użyta w środowisku wykonawczym.

Prosta kategoria

Interfejs i implementacja prostej kategorii na NSArray o nazwie Filtr, za pomocą jednej metody filtrującej liczby.

Dobrą praktyką jest dodawanie przedrostka ( PF ) do metody, aby upewnić się, że nie zastąpimy żadnych przyszłych metod 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

Deklarowanie metody klasy

Plik nagłówka UIColor+XYZPalette.h :

@interface UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor;

@end

i wdrożenie 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

Dodawanie właściwości z kategorią

Właściwości można dodawać do kategorii przy użyciu powiązanych obiektów, co jest cechą środowiska wykonawczego Objective-C.

Należy pamiętać, że deklaracja własność retain, nonatomic mecze ostatni argument objc_setAssociatedObject . Wyjaśnienia znajdują się w części Dołącz obiekt do innego istniejącego obiektu .

#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

Zgodny z protokołem

Możesz dodać protokoły do klas standardowych, aby rozszerzyć ich funkcjonalność:

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

@interface NSDictionary (XYZExtended) <EncodableToString>
@end

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

gdzie XYZ prefiks twojego projektu

Utwórz kategorię na XCode

Kategorie zapewniają możliwość dodania dodatkowej funkcjonalności do obiektu bez podklasy lub zmiany rzeczywistego obiektu.

Na przykład chcemy ustawić niestandardowe czcionki. UIFont kategorię, która doda funkcjonalność do klasy UIFont . Otwórz projekt XCode, kliknij File -> New -> File i wybierz File Objective-C file , kliknij Dalej, wprowadź nazwę kategorii, powiedz „CustomFont”, wybierz typ pliku jako Kategoria i Klasa jako UIFont, a następnie kliknij „Dalej”, a następnie „Utwórz. „

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Zadeklaruj metodę kategorii: -

Kliknij „UIFont + CustomFonts.h”, aby wyświetlić plik nagłówka nowej kategorii. Dodaj następujący kod do interfejsu, aby zadeklarować metodę.

@interface UIFont (CustomFonts)

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

@end

Teraz zaimplementuj metodę kategorii: -

Kliknij „UIFont + CustomFonts.m”, aby wyświetlić plik implementacji kategorii. Dodaj następujący kod, aby utworzyć metodę, która ustawi czcionkę ProductSansRegular.

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

Zaimportuj swoją kategorię

#import "UIFont+CustomFonts.h"

Teraz ustaw czcionkę Label

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow