Использование #define для создания стилей - PullRequest
0 голосов
/ 10 декабря 2011

Мне интересно, могу ли я использовать серию #DEFINE для создания опций стиля для моего приложения.

Например,

#DEFINE style1: backGroundColor = [UIColor: colorNamed whiteColor];
txtColor = [UIColor blackColor];  #DEFINE style2....

Мой вопрос: каков синтаксисза это утверждение?

Ответы [ 3 ]

3 голосов
/ 10 декабря 2011

Хотя, безусловно, можно использовать операторы DEFINE для создания опций стиля для вашего приложения, мне интересно, имеет ли смысл использование директив препроцессора для таких функций, как стили, которые станут коллекциями свойств. Если вы используете операторы DEFINE для определения своих стилей, в конечном итоге вам будет трудно предоставить выбор стиля в качестве параметра времени выполнения для ваших пользователей.

Вместо этого я склонен думать, что вам будет лучше создать иерархию классов для этого и реализовать ее как одиночку. С помощью иерархии классов вы можете определить любые общие стили поведения в своем корневом классе, а затем наследовать их для реализации определенных стилей. Позже вы можете предоставить возможность выбирать стили своему пользователю, если хотите.

1 голос
/ 10 декабря 2011

Возможно, вы ищете этот синтаксис:

Настройка стиля


#define STYLE1
//#define STYLE2

и затем в любом месте вашего кода (уровень класса или уровень метода, заголовок или файл реализации).


#ifdef STYLE1
   //code for the first style
   UIColor* backgroundColor = [UIColor redColor];
#elif STYLE2
   //code for the second style
   UIColor* backgroundColor = [UIColor greenColor];
#else
   //code for the third style
   UIColor* backgroundColor = [UIColor clearColor];
#endif


Подробнее о препроцессоре C: http://en.wikipedia.org/wiki/C_preprocessor

1 голос
/ 10 декабря 2011

#define backgroundColor [UIColor whiteColor] затем, чтобы использовать его, вы скажете UIColor *txtColor = backgroundColor;.

Хотя вы можете использовать только whiteColor в качестве определения вместо [UIColor whiteColor].Затем вы бы позвонили [UIColor backgroundColor]; вместо приведенного выше примера.

Я бы не стал делать это для генерации стилей.Определение различных параметров вне кода было бы хорошей идеей, но использование define является довольно обязательным и устраняет цель отсоединения пользовательского интерфейса от кода.


В #define нигде не ставьте точку с запятой,Когда препроцессор вставляет определение, он вставляет любую точку с запятой там, где она есть; вы не хотите, чтобы препроцессор вставлял точки с запятой. При написании определения вы, вероятно, не знаете всех мест, в которые вы его напишите, поэтому вам не следует использовать точку с запятой, потому что вы можете написать его встроеннымвыражение.

Другой вариант - использовать const.

В написанном мною коде у меня есть #define s для строковых литералов @"literal string" и чисел.В других местах я использую объявление const, которое выглядит следующим образом:

//static type *const variableName = assignment;

static NSString *const kConstantString = @"Constant variable";

Константы не используют препроцессор для заполнения информации.Если вы часто обращаетесь к определению и оно использует некоторые вычисления, возможно, оно лучше подходит для объявления констант, которое сохраняется только один раз.

Другая большая причина, по которой я использовал const вместо #define, заключается в том, что define не проверяется типом, поскольку обрабатывается препроцессором.Define в основном отключает предупреждения компилятора и выдает только ошибки;строгие предупреждения чрезвычайно полезны и могут избавить вас от многих неприятностей.

...