如何在宏中使用块

时间:2012-12-13 12:22:26

标签: objective-c ios ios4 foundation

我试图在宏定义中使用块但没有运气。

以下是代码:

#define IPHONE_OR_IPAD_BLOCK(void(^iphoneBlock)(void), void(^ipadBlock)(void)) ({ \
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) \
    { \
        iphoneBlock(); \
    } \
    else if (ipadBlock) \
    { \
        ipadBlock(); \
    } \
})

它似乎没有编译。

您如何建议在宏中使用块?

更新:感谢您快速回复Ramy Al Zuhouri,我会坚持使用静态功能,因为它会提供更多类型检查:

NS_INLINE void DoIphoneOrIpadBlock(void (^iphoneBlock)(void), void (^ipadBlock)(void))
{
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone))
    {
        iphoneBlock();
    }
    else if (ipadBlock)
    {
        ipadBlock();
    }
}

1 个答案:

答案 0 :(得分:2)

在宏中没有任何参数检查,以这种方式改变:

#define IPHONE_OR_IPAD_BLOCK(iphoneBlock, ipadBlock) ({ \
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) \
    { \
        iphoneBlock(); \
    } \
    else if (ipadBlock) \
    { \
        ipadBlock(); \
    } \
})

如果使用错误的参数,您可能会收到语法错误 如果您不喜欢这种行为,可以使用内联函数更改它。