Ricerca…


Sintassi

  • @interface ClassName (categoryName) // ClassName è la classe da estendere

  • // Metodo e dichiarazioni di proprietà

  • @fine

Osservazioni

Per evitare conflitti con il nome del metodo, si consiglia di usare prefissi (come xyz_ nell'esempio). Se esistono metodi con lo stesso nome, non è definito quale sarà utilizzato nel runtime.

Categoria semplice

Interfaccia e implementazione di una categoria semplice su NSArray, denominato Filter, con un unico metodo che filtra i numeri.

È buona pratica aggiungere un prefisso ( PF ) al metodo per garantire che non sovrascriveremo alcun metodo NSArray futuro.

@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

Dichiarazione di un metodo di classe

File di intestazione UIColor+XYZPalette.h :

@interface UIColor (XYZPalette)

+(UIColor *)xyz_indigoColor;

@end

e implementazione 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

Aggiunta di una proprietà con una categoria

Le proprietà possono essere aggiunte con le categorie usando oggetti associati, una caratteristica del runtime Objective-C.

Si noti che la dichiarazione di proprietà di retain, nonatomic corrisponde all'ultimo argomento a objc_setAssociatedObject . Vedi Collega oggetto ad un altro oggetto esistente per spiegazioni.

#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

Conforme al protocollo

È possibile aggiungere protocolli a classi standard per estenderne le funzionalità:

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

@interface NSDictionary (XYZExtended) <EncodableToString>
@end

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

dove XYZ è il prefisso del tuo progetto

Crea una categoria su XCode

Le categorie offrono la possibilità di aggiungere alcune funzionalità extra a un oggetto senza creare sottoclassi o modificare l'oggetto reale.

Ad esempio vogliamo impostare alcuni caratteri personalizzati. Creiamo una categoria che aggiunge funzionalità alla classe UIFont . Apri il tuo progetto XCode, fai clic su File -> New -> File e scegli il File Objective-C file , fai clic su Avanti inserisci il nome della tua categoria dì "CustomFont" scegli il tipo di file come Categoria e Classe come UIFont, quindi fai clic su "Avanti" seguito da "Crea". "

inserisci la descrizione dell'immagine qui

inserisci la descrizione dell'immagine qui

Dichiarare il metodo di categoria: -

Fai clic su "UIFont + CustomFonts.h" per visualizzare il file di intestazione della nuova categoria. Aggiungere il seguente codice all'interfaccia per dichiarare il metodo.

@interface UIFont (CustomFonts)

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

@end

Ora implementare il metodo di categoria: -

Fai clic su "UIFont + CustomFonts.m" per visualizzare il file di implementazione della categoria. Aggiungere il seguente codice per creare un metodo che imposterà il carattere ProductSansRegular.

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

Importa la tua categoria

#import "UIFont+CustomFonts.h"

Ora imposta il font Label

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow