【问题标题】:Stringify macro values in Objective C?在Objective C中对宏值进行字符串化?
【发布时间】:2011-12-06 02:13:28
【问题描述】:

我正在使用 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 作为属性的类中,我这样定义它的setter:

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

假设客户端调用 setFoo 时使用了非 nil 值,但 foo 属性已经非 nil。我要打印宏:

foo 已设置,地址=0x5e55400

但它正在打印:

#PROP_NAME 已设置,地址=0x5e55400

有什么建议吗?

【问题讨论】:

  • 为什么不直接使用@property (assign)?
  • @bryanmac 我想断言,如果我尝试在 foo 已经是非 nil 时分配一个非 nil 值,或者在 foo 已经是 nil 时分配一个 nil 值。无论哪种情况,使用@property(assign) 都会盲目地覆盖该值。

标签: ios objective-c xcode macros c-preprocessor


【解决方案1】:

你有没有尝试过类似的东西

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2011-08-14
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多