我试图在宏定义中使用块但没有运气。
以下是代码:
#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();
}
}
答案 0 :(得分:2)
在宏中没有任何参数检查,以这种方式改变:
#define IPHONE_OR_IPAD_BLOCK(iphoneBlock, ipadBlock) ({ \
if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) \
{ \
iphoneBlock(); \
} \
else if (ipadBlock) \
{ \
ipadBlock(); \
} \
})
如果使用错误的参数,您可能会收到语法错误 如果您不喜欢这种行为,可以使用内联函数更改它。