Использование синглтона для создания вспомогательного класса базового стиля

Я новичок в objective-c, и у меня есть вопрос об архитектуре или дизайне. Я создаю приложение для ios, и, как и большинство приложений для ios, в нем используются различные цвета, шрифты, шаблоны и т. Д. Возможно, в настоящее время я пишу код неправильно, но я обнаружил, что переписываю такие вещи, как настройки цвета. В результате смена цветов становится упражнением по поиску всех настроек цвета в коде, их переписыванию и т. Д. Мне это кажется немного неэффективным.

Например, я использую темно-красный цвет в нескольких местах своего приложения. Я часто пишу метод [UIColor colorWithRed ...]. Однако мне любопытно, является ли создание синглтона, который возвращает мои пользовательские цвета (в виде UIColor), разумным подходом к «модульности моего пакета стилей». Таким образом, я мог бы написать что-то вроде этого

[label setTextColor:[[MyStyleSingletonClass sharedStyler] myDarkRed]];

Таким образом, если дизайнеры вдруг захотят, чтобы myDarkRed был немного темнее, я меняю его один раз, и это хорошо, чтобы просмотреть приложение. Очевидно, что стиль и UX - это не только цвет, но мне любопытно, имеет ли этот подход смысл или я настраиваю себя на проблемы в будущем. Или, может быть, эта возможность уже существует в объекте-c, и я упускаю суть. Заранее спасибо.


person natenash203    schedule 15.03.2013    source источник


Ответы (2)


Я думаю, что лучший подход к чему-то вроде этого - это категория методов класса в самом UIColor. Я часто пишу категории цветов для проектов с большим количеством пользовательских цветов.

Что-то вроде этого:

// UIColor+AppAdditions.h
@interface UIColor (AppAdditions)

+ (UIColor *)myDarkRed;

@end

// UIColor+AppAdditions.m

#import "UIColor+AppAdditions.h"

@implementation UIColor (AppAdditions)

+ (UIColor *)myDarkRed
{
    return [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0];
}

@end

Таким образом, вам не понадобится целый синглтон, и он будет более портативным, если синглтон выполняет другие задачи. И вы можете получить чистый доступ к своим цветам следующим образом:

[label setTextColor:[UIColor myDarkRed]];

Примечание

Как упоминалось Робом и Полом. Лучше всего назвать их соответствующим образом. Я взял то имя, которое у вас было, но было бы лучше назвать их специально для их использования и следовать таким соглашениям, как префикс и суффикс.

person Ryan Poolos    schedule 15.03.2013
comment
Очень хорошее мышление :) Замечательно иметь согласованную цветовую схему во всем приложении, и что-то вроде этого действительно помогает. - person Ryan Poolos; 15.03.2013
comment
Я также часто использую категорию. Однако одним из преимуществ объекта стиля является то, что его можно заменить во время выполнения, чтобы изменить стиль. Например, вместо myDarkRed часто лучше иметь такие методы, как errorColor, и это то, что может потребоваться изменить. (Но я часто все еще использую категориальный подход, поскольку это так просто; я просто делаю errorColor метод на UIColor.) - person Rob Napier; 15.03.2013
comment
Я поклонник категориального подхода и согласен с @RobNapier в отношении обозначения цвета для его использования, а не его фактической реализации (где это возможно). Однако следует учитывать, что часто лучше придерживаться единого стиля именования - в данном случае после UIColor это должно быть <description>Color. Еще один момент при именовании заключается в том, что вы должны использовать префикс для методов, добавленных с категорией, чтобы избежать конфликтов имен методов, например. Я могу закончить с pas_lightBackgroundColor. - person Paul.s; 15.03.2013
comment
Хорошие моменты. Я добавил примечание к ответу для тех, кто пришел посмотреть. - person Ryan Poolos; 15.03.2013
comment
Спасибо за ответ. Это имеет смысл. - person natenash203; 18.03.2013

Почему бы не использовать macro?

in YourHelperClass.h

#define DARK_RED    [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0]

и вы можете использовать это (не забудьте import YourHelperClass.h):

[label setTextColor:DARK_RED];

Думаю, лучше использовать macro

person Guo Luchuan    schedule 15.03.2013
comment
Во-вторых, я использую для этого макрос. Таким образом, Styles.h можно легко использовать для цветов, шрифтов и т. Д. Подход категории означает, что в категории UIColor+Style могут храниться только цвета, не говоря уже о том, что это более подробный подход. - person cleverbit; 31.07.2013