Objective-C Language
Kategorien
Suche…
Syntax
@Interface ClassName (categoryName) // ClassName ist die Klasse, die erweitert werden soll
// Methoden- und Eigenschaftsdeklarationen
@Ende
Bemerkungen
Um Methodenkonflikte zu vermeiden, wird empfohlen, Präfixe zu verwenden (z. B. xyz_
im Beispiel). Wenn Methoden mit dem gleichen Namen existieren, ist nicht definiert, welche Methode zur Laufzeit verwendet wird.
Einfache Kategorie
Schnittstelle und Implementierung einer einfachen Kategorie in NSArray, genannt Filter, mit einer einzigen Methode, die Zahlen filtert.
Es NSArray
, der Methode ein Präfix ( PF
) hinzuzufügen, um sicherzustellen, dass keine zukünftigen NSArray
Methoden überschrieben werden.
@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
Klassenmethode deklarieren
Header-Datei UIColor+XYZPalette.h
:
@interface UIColor (XYZPalette)
+(UIColor *)xyz_indigoColor;
@end
und Implementierung 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
Eine Eigenschaft mit einer Kategorie hinzufügen
Eigenschaften können mithilfe von verknüpften Objekten, einer Funktion der Objective-C-Laufzeit, mit Kategorien hinzugefügt werden.
Beachten Sie, dass die Eigenschaftsdeklaration von retain, nonatomic
dem letzten Argument zu objc_setAssociatedObject
. Erläuterungen dazu finden Sie unter Objekt an anderes vorhandenes Objekt anhängen.
#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
Protokollkonform
Sie können Standardklassen Protokolle hinzufügen, um deren Funktionalität zu erweitern:
@protocol EncodableToString <NSObject>
- (NSString *)toString;
@end
@interface NSDictionary (XYZExtended) <EncodableToString>
@end
@implementation NSDictionary (XYZExtended)
- (NSString *)toString {
return self.description;
}
@end
wo XYZ
das Präfix Ihres Projekts
Erstellen Sie eine Kategorie in XCode
Kategorien bieten die Möglichkeit, einem Objekt zusätzliche Funktionen hinzuzufügen, ohne das eigentliche Objekt zu subklassifizieren oder zu ändern.
Zum Beispiel möchten wir einige benutzerdefinierte Schriftarten festlegen. Lassen Sie uns eine Kategorie erstellen, die der UIFont
Klasse Funktionen UIFont
. Öffnen Sie Ihr XCode-Projekt, klicken Sie auf File
-> New
-> File
und wählen Sie Objective-C file
. Klicken Sie auf Weiter. Geben Sie Ihren Kategorienamen ein, sagen Sie "CustomFont". "
Deklarieren Sie die Kategoriemethode: -
Klicken Sie auf "UIFont + CustomFonts.h", um die Header-Datei der neuen Kategorie anzuzeigen. Fügen Sie der Schnittstelle den folgenden Code hinzu, um die Methode zu deklarieren.
@interface UIFont (CustomFonts)
+(UIFont *)productSansRegularFontWithSize:(CGFloat)size;
@end
Implementieren Sie jetzt die Kategoriemethode: -
Klicken Sie auf "UIFont + CustomFonts.m", um die Implementierungsdatei der Kategorie anzuzeigen. Fügen Sie den folgenden Code hinzu, um eine Methode zu erstellen, mit der ProductSansRegular Font festgelegt wird.
+(UIFont *)productSansRegularFontWithSize:(CGFloat)size{
return [UIFont fontWithName:@"ProductSans-Regular" size:size];
}
Importieren Sie Ihre Kategorie
#import "UIFont+CustomFonts.h"
Legen Sie nun die Beschriftungsschriftart fest
[self.label setFont:[UIFont productSansRegularFontWithSize:16.0]];