Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在宏中使用块_Objective C_Ios_Ios4_Foundation - Fatal编程技术网

Objective c 如何在宏中使用块

Objective c 如何在宏中使用块,objective-c,ios,ios4,foundation,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 i

我试图在宏定义中使用块,但运气不好

代码如下:

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

在宏中没有任何参数检查,请按以下方式进行更改:

#define IPHONE_OR_IPAD_BLOCK(iphoneBlock, ipadBlock) ({ \
    if (iphoneBlock && (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)) \
    { \
        iphoneBlock(); \
    } \
    else if (ipadBlock) \
    { \
        ipadBlock(); \
    } \
})
如果它与错误的参数一起使用,可能会出现语法错误。
如果您不喜欢这种行为,可以使用内联函数进行更改