2016-06-02 9 views
1

Ich habe eine Kategorie wie folgt definiert:Nein Weiß Klasse Methode in NSString Kategorie

#import <Foundation/Foundation.h> 

@interface NSString (MyApp) 

+ (UIColor *)colorFromHexString; 

@end 


#import "NSString+MyApp.h" 

@implementation NSString (MyApp) 

+ (UIColor *)colorFromHexString 
{ 
    self = [self stringByReplacingOccurrencesOfString:@"#" withString:@""]; 
    unsigned rgbValue = 0; 
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    [scanner scanHexInt:&rgbValue]; 
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; 
} 

@end 

ich einen Fehler auf der Linie self = [self stringByReplacingOccurrencesOfString:@"#" withString:@""]; bin immer das sagt: "No know class method for selector stringByReplacingOccurrencesOfString:withString" and "cannot assign self in a class method".

Ich bin verwirrt, warum ich nicht in der Lage bin, dies in einer NSString Category zu tun. Ich habe gesehen examples online, die Dinge sehr ähnlich mit "Selbst" in einer NSString Category so bin ich nicht sicher, warum es hier nicht funktioniert.

Wer weiß, was ich falsch mache?

+2

Im Allgemeinen sollten Sie keine Kategorien zu Systemklassen hinzufügen. Wenn Sie dies tun, sollten Sie ihnen etwas _leven _... vorsetzen, um Kollisionen zu vermeiden. Dies würde wahrscheinlich auch als eine Kategorie auf UIColor (als Klassenmethode) sinnvoller sein, da es wie eine Farbfabrik-Methode ist. – bbum

Antwort

1

In Ihrem Code sind mehrere Fehler enthalten.

die Instanzmethode verwenden (-) anstelle von statischer Methode (+)

// INCORRECT. self in a static method points to class object 
// + (UIColor *)colorFromHexString 

// CORRECT. self is instance method points to instance of class. 
- (UIColor *)colorFromHexString 

Auch auf Zeile 1 assign hexString anstelle von self.

- (UIColor *)colorFromHexString 
{ 
    NSString *hexString = [self stringByReplacingOccurrencesOfString:@"#" withString:@""]; 
    unsigned rgbValue = 0; 
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    [scanner scanHexInt:&rgbValue]; 
    return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; 
} 
+0

Großartig, danke! FYI. HexString als Parameter in scannerWithString: war ein Tippfehler. Ich wollte mich selbst darin haben - nicht dass es so oder so funktionierte ... – tentmaking

+1

Need moooore ☕️ –