Zoeken…


Syntaxis

  • @interface ClassName (categoryName) // ClassName is de klasse die moet worden uitgebreid

  • // Methode- en eigenschapsverklaringen

  • @einde

Opmerkingen

Om conflicten tussen methodenamen te voorkomen, wordt het aanbevolen om voorvoegsels te gebruiken (zoals xyz_ in het voorbeeld). Als er methoden met dezelfde naam bestaan, is niet gedefinieerd welke methode in de runtime zal worden gebruikt.

Eenvoudige categorie

Interface en implementatie van een eenvoudige categorie op NSArray, genaamd Filter, met een enkele methode die getallen filtert.

Het is een goede gewoonte om een voorvoegsel ( PF ) aan de methode toe te voegen om ervoor te zorgen dat we geen toekomstige NSArray methoden overschrijven.

@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

Een klassemethode verklaren

Koptekstbestand UIColor+XYZPalette.h :

@interface UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor;

@end

en implementatie 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

Een eigenschap toevoegen met een categorie

Eigenschappen kunnen worden toegevoegd aan categorieën met behulp van bijbehorende objecten, een kenmerk van de Objective-C runtime.

Merk op dat de eigenschapsverklaring van retain, nonatomic overeenkomt met het laatste argument met objc_setAssociatedObject . Zie Object koppelen aan een ander bestaand object voor uitleg.

#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

Conform protocol

U kunt protocollen toevoegen aan standaardklassen om hun functionaliteit uit te breiden:

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

@interface NSDictionary (XYZExtended) <EncodableToString>
@end

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

waar XYZ het voorvoegsel van uw project

Maak een categorie op XCode

Categorieën bieden de mogelijkheid om wat extra functionaliteit aan een object toe te voegen zonder subklasse of het feitelijke object te wijzigen.

We willen bijvoorbeeld enkele aangepaste lettertypen instellen. Laten we een categorie maken die functionaliteit toevoegt aan de UIFont klasse. Open uw XCode-project, klik op File -> New -> File en kies Objective-C file , klik op Volgende voer uw categorienaam in en zeg "CustomFont" kies het bestandstype als Categorie en Klasse als UIFont en klik vervolgens op "Volgende" gevolgd door "Maken. "

voer hier de afbeeldingsbeschrijving in

voer hier de afbeeldingsbeschrijving in

Verklaar de categoriemethode: -

Klik op "UIFont + CustomFonts.h" om het headerbestand van de nieuwe categorie te bekijken. Voeg de volgende code toe aan de interface om de methode te declareren.

@interface UIFont (CustomFonts)

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

@end

Implementeer nu de categoriemethode: -

Klik op "UIFont + CustomFonts.m" om het implementatiebestand van de categorie te bekijken. Voeg de volgende code toe om een methode te maken waarmee ProductSansRegular Font wordt ingesteld.

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

Importeer uw categorie

#import "UIFont+CustomFonts.h"

Stel nu het lettertype Label in

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow