2

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

这是代码:

#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();
    }
}
4

1 回答 1

2

在宏中没有任何参数检查,这样更改:

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

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

于 2012-12-13T12:25:23.830 回答