Objective-C Language
Kategorie
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. „
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]];