iOS可变参数va_list

栏目: IOS · 发布时间: 5年前

内容简介:也曾考虑过在封装的代码中通过
+ (NSString *)getGoodsRuleWithCarLength:(NSString *)carLength andCarType:(NSString *)carType andSpecialRequire:(NSString *)specialRequire andEntrance:(TYTGoodsRuleEntrance)entrance{
    NSString *goodsRule = nil;
    if(carLength.length > 0){
        if(carType.length > 0){
            if(specialRequire.length > 0){
                goodsRule = [NSString stringWithFormat:@"%@/%@/%@",carLength,carType,specialRequire];
            }else{
                goodsRule = [NSString stringWithFormat:@"%@/%@",carLength,carType];
            }
        }else{
            if(specialRequire.length > 0){
                goodsRule = [NSString stringWithFormat:@"%@/%@",carLength,specialRequire];
            }else{
                goodsRule = [NSString stringWithFormat:@"%@",carLength];
            }
        }
    }else{
        if(carType.length > 0){
            if(specialRequire.length > 0){
                goodsRule = [NSString stringWithFormat:@"%@/%@",carType,specialRequire];
            }else{
                goodsRule = [NSString stringWithFormat:@"%@",carType];
            }
        }else{
            if(specialRequire.length > 0){
                goodsRule = [NSString stringWithFormat:@"%@",specialRequire];
            }else{
                goodsRule = @"";
            }
        }
    }
    return goodsRule;
}
复制代码

二、可变参数的方式

//创建NSString的分类
/**
 *  用斜线拼接参数
 *  count为参数个数,其它参数必须是NSString类型(可为nil)
 *  eg.需要拼接三个字符串 长、宽、高为 "长/宽/高"  方法调用方式为[NSString splicWithSlantParamsCount:3, @"长", @"宽", @"高"];
 */
+ (NSString *)stringSplicWithSlantParamsCount:(int)count,...{
    if(count < 1){
        return @"";
    }
    int index = 0;
    va_list args;
    va_start(args, count);
    //拼接后的字符串
    NSString *paramSum = @"";
    NSString *otherParam;
    //循环到结尾就停止循环
    while(index<count){
        index ++;
        otherParam = va_arg(args, NSString *);
        if(paramSum.length > 0){
            if(otherParam.length > 0){
                paramSum = [NSString stringWithFormat:@"%@/%@",paramSum,otherParam];
            }
        }else{
            if(otherParam.length > 0){
                paramSum = otherParam;
            }
        }
    }
    va_end(args);
    return paramSum;
}

复制代码
+ (NSString *)getGoodsRuleWithCarLength:(NSString *)carLength andCarType:(NSString *)carType andSpecialRequire:(NSString *)specialRequire andEntrance:(TYTGoodsRuleEntrance)entrance{
    //用"/"拼接字符串
    NSString *goodsRule = [NSString stringSplicWithSlantParamsCount:3, carLength, carType, specialRequire];
    return goodsRule;
}
复制代码

很明显,第二中方法扩展性更好,逼格更好

也曾考虑过在封装的代码中通过 vsnprintf 计算可变参数的长度,但是参数有可能为空,就会导致崩溃,所以最后决定直接传进来参数的个数


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

One Click

One Click

Richard L. Brandt / Portfolio Hardcover / 2011-10-27 / 25.95

An insightful look at how Amazon really works and how its founder and CEO makes it happen. Amazon's business model is deceptively simple: make online shopping so easy and convenient that customers ......一起来看看 《One Click》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具