`

使用变参函数,拼接字符串的示例代码

 
阅读更多

最近做了个需求,就是各种拼接字符串。将"aaa","bbb","ccc"拼接成"aaa, bbb, ccc",参数的个数是不确定的。于是想到用变参函数来做挺好的,参考了FMDB的源代码,以下是代码:

// 变参函数,用","拼接多表字符串,最后一个参数应该是nil
-(NSMutableString*) concatTableStrings:(NSString*)first, ...
{
    NSMutableString *result = [NSMutableString new];
    
    [result appendString:first];
    [result appendString:@","];
    
    va_list ap;// 参数列表的指针
    va_start(ap, first);// 指向第一个参数
    
    NSString* next_arg;
    while ((next_arg = va_arg(ap, NSString*))) {// 循环指向下一个参数,第一个参数不包括在内
        [result appendString:next_arg];
        [result appendString:@","];
    }
    [result substringToIndex:([result length]-1)];// 去掉最后一个","
    va_end(ap);
    
    return result;
}

关键是4个宏:va_list, va_start, va_arg, va_end。写变参函数主要注意2点:

1、最后一个参数要传nil进来,很多开源的库也都是这个风格

2、第一次执行va_arg,next_arg就已经指向第2个参数了。所以在执行va_arg之前,需要先处理第1个参数,否则第1个参数就会被漏掉

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics