Строгать значения макросов в Objective C? - PullRequest
0 голосов
/ 06 декабря 2011

Я занимаюсь разработкой в ​​XCode 4.2, и мне было интересно, как я могу привести параметры макроса в соответствие?Я пытался использовать #, как я думал, что будет делать в C , но безрезультатно.Вот мой макрос:

#define ASSIGN_PROPERTY(PROP_NAME, PROP_NAME_PARAM) { \
  if (PROP_NAME_PARAM == nil) { \
    NSAssert(PROP_NAME != nil, @"#PROP_NAME is already nil"); \
    PROP_NAME = nil; \
  } else { \
    NSAssert1(PROP_NAME == nil, @"#PROP_NAME is already set, address=%p", PROP_NAME); \
    PROP_NAME = PROP_NAME_PARAM; \
  } \
}

Затем в классе, имеющем foo в качестве свойства, я определяю его установщик следующим образом:

- (void) setFoo:(NSObject *)fooParam {
  ASSIGN_PROPERTY(foo, fooParam)
}

Скажем, клиент звонит setFooс ненулевым значением, но свойство foo уже не ноль.Я хочу, чтобы макрос печатал:

foo уже установлен, адрес = 0x5e55400

Но вместо этого он печатает:

# PROP_NAME isуже установлен, адрес = 0x5e55400

Есть совет?

1 Ответ

2 голосов
/ 06 декабря 2011

Вы пробовали что-то вроде

NSAssert(PROP_NAME != nil, @"%s is already nil", #PROP_NAME);
...