您的位置:首页 > 移动开发 > Objective-C

objective-C 使用包含函数指针的结构体

2011-08-01 10:19 417 查看
最近在完成一个ios上的svg解析程序,遇到了需要对不同的字符串调用不同处理函数这样的需求。

如果用if(){}else{} 的反复调用,非常不利于程序的逻辑扩展,所以还是想起了老方法,定义一个相当于map功能的结构体数组, 每个字符串对应一个处理函数,通过查找数组调用相关处理函数来完成需求,简单明了。

由于Objective-C是兼容C的,所以在ios 上完成此功能也很简单,代码如下:

a.h:

(注意我并没有把结构体和函数定义到接口中)

typedefvoid (* funActionString)(NSString *,CGContextRef);

typedefstruct _functionString{

char *functionStr;

void (*funActionString) (NSString *,
CGContextRef);
} FunStr;

funActionString initFillintoContext(NSString *fill,CGContextRef context);
funActionString initStrokeintoContext(NSString *stroke,CGContextRef context);
funActionString initStrokeWidthintoContext(NSString *strokeWidth,CGContextRef context);

a.m:

constFunStr strMap[] = {
{@"fill", &initFillintoContext},
{@"stroke", &initStrokeintoContext},
{@"stroke-width", &initStrokeWidthintoContext}
};

funActionString initFillintoContext(NSString *fill,CGContextRef context)
{
...;
}

funActionString initStrokeintoContext(NSString *stroke,CGContextRef context)
{
...;
}

funActionString initStrokeWidthintoContext(NSString *strokeWidth,CGContextRef context)
{
...;
}

编译运行,成功~~strMap可以在m文件的任何地方被使用。

for (int i = 0; i < sizeof(strMap)/ sizeof(strMap[0]); i++)
{

NSString *value = [styleDict valueForKey:strMap[i].functionStr];

if (value != nil) {
strMap[i].funActionString(value, context);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐