Расширение UIColor

Я расширил класс UIColor в target-c, файл заголовка выглядит так:

@interface UIColor (ColorDecision)
+ (UIColor*) directOrLegacyWithColor;
+ (UIColor*) changeColor;
@end

реализация:

#import "UIColor+ColorDecision.h"

@implementation UIColor (ColorDecision)
 + (UIColor *)directOrLegacyWithColor {
     UIColor *color;
     UIColor *returenedColor = self.changeColor;
     color = LoginsManager.getSharedInstance.isDirect ? returenedColor : [UIColor self];
     return color;
}

 + (UIColor *)changeColor{
     UIColor *newColor;
     if (self == Color_C7) newColor = Color_Direct;

     return newColor;
}
@end

Я получаю предупреждение от компилятора в строке ниже «Несовместимые типы указателей, назначаемые« UIColor * »из« Класса »».

color = LoginsManager.getSharedInstance.isDirect ? returenedColor : [UIColor self];

Я знаю, что проблема связана с указателями, но я не понимаю, что мне делать.

РЕДАКТИРОВАТЬ

Благодаря комментарию manishharma93 я решил первую проблему, теперь, когда я хочу использовать указанный метод, кажется, что методы не видны.

Я определил свои цвета в файле глобального заголовка следующим образом:

#define Color_C7           [SharedUtility colorWithHexString:@"FF6A00"] // orange
#define Color_Direct      [Utility colorWithHexString:@"313d53"] // Color for direct

Это реализация функции colorWithHexString в классе Utility:

+(UIColor *)colorWithHexString:(NSString *)hexString {
NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
CGFloat alpha, red, blue, green;
switch ([colorString length]) {
    case 3: // #RGB
        alpha = 1.0f;
        red   = [SharedUtility colorComponentFrom: colorString start: 0 length: 1];
        green = [SharedUtility colorComponentFrom: colorString start: 1 length: 1];
        blue  = [SharedUtility colorComponentFrom: colorString start: 2 length: 1];
        break;
    case 4: // #ARGB
        alpha = [SharedUtility colorComponentFrom: colorString start: 0 length: 1];
        red   = [SharedUtility colorComponentFrom: colorString start: 1 length: 1];
        green = [SharedUtility colorComponentFrom: colorString start: 2 length: 1];
        blue  = [SharedUtility colorComponentFrom: colorString start: 3 length: 1];
        break;
    case 6: // #RRGGBB
        alpha = 1.0f;
        red   = [SharedUtility colorComponentFrom: colorString start: 0 length: 2];
        green = [SharedUtility colorComponentFrom: colorString start: 2 length: 2];
        blue  = [SharedUtility colorComponentFrom: colorString start: 4 length: 2];
        break;
    case 8: // #AARRGGBB
        alpha = [SharedUtility colorComponentFrom: colorString start: 0 length: 2];
        red   = [SharedUtility colorComponentFrom: colorString start: 2 length: 2];
        green = [SharedUtility colorComponentFrom: colorString start: 4 length: 2];
        blue  = [SharedUtility colorComponentFrom: colorString start: 6 length: 2];
        break;
    default:
        LOG(@"WARNING: tried to set color from string: %@ BUT string should be  a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB ", hexString);
        return nil;
        break;
}
return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
}

теперь, когда я хочу использовать свою функцию расширения, например, так: self.background = Color_C7. directOrLegacyWithColor функция 'directOrLegacyWithColor' не видна


person tara tandel    schedule 01.08.2019    source источник
comment
Измените себя на [UIColor self]. Предупреждение будет идти   -  person manishsharma93    schedule 01.08.2019
comment
@manishsharma93 проблема решена, спасибо. но теперь у меня другая проблема, когда я хочу использовать, например, Color_C7. directOrLegacyWithColor метод 'directOrLegacyWithColor' не виден   -  person tara tandel    schedule 01.08.2019
comment
Можете ли вы обновить свой ответ значениями для Color_C7 и Color_Direct. Чтобы мне было легко выяснить причину. И я напишу комментарий выше в ответ, примите его, если он решит вашу проблему.   -  person manishsharma93    schedule 01.08.2019


Ответы (1)


В вашем методе измените «self» на «[UIColor self]».

+ (UIColor *)directOrLegacyWithColor {
     UIColor *color;
     UIColor *returenedColor = self.changeColor;
     color = LoginsManager.getSharedInstance.isDirect ? returenedColor : [UIColor self];
     return color;
}
person manishsharma93    schedule 01.08.2019
comment
Я принял ваш ответ, но при редактировании добавил еще один - person tara tandel; 01.08.2019
comment
@taratandel Спасибо, что приняли ответ. Но я не думаю, что вы можете получить доступ к методам класса UIColor в макросах. Итак, что вы можете сделать, так это создать объект UIColor и получить в него значение, например, UIColor *color = [UIColor directOrLegacyWithColor];. И тогда вы можете использовать эти цвета, как хотите - person manishsharma93; 01.08.2019
comment
могу ли я сделать это так? + (UIColor *)directOrLegacyWithColor: (UIColor *)color { UIColor *newColor; UIColor *returnedColor = self.changeColor: цвет; newColor = LoginsManager.getSharedInstance.isDirect ? returenedColor : [UIColor self]; вернуть новый цвет; } + (UIColor *)changeColor: (UIColor *)color{ UIColor *newColor; if (self == Color_C7) newColor = Color_Direct; вернуть новый цвет; } - person tara tandel; 01.08.2019
comment
Да. Попробуйте так. - person manishsharma93; 01.08.2019
comment
Я все еще получаю сообщение об ошибке: нет члена с именем "changeColor" в "struct objc_class" - person tara tandel; 01.08.2019
comment
Попробуйте изменить эту строку self.changeColor: color на [self changeColor:color] - person manishsharma93; 01.08.2019