iOS 使用可变参数va_list, 定义一个方法

在用FMDB做数据存储,对一个字段进行批量插入数据,
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;

在没有看到这个方法前,自己决定折腾制造了一段的轮子。


下面贴上部分轮子的代码

- (void)addObj:(id)firstObj,...
{
    NSMutableArray *array = [NSMutableArray array];
    if (firstObj)
    {
        va_list argsList;
        [array addObject:firstObj];
        va_start(argsList, firstObj);
        id arg;
        while ((arg = va_arg(argsList, id)))
        {
            [array addObject:arg];
        }
        va_end(argsList);
    }
    NSLog(@"sssss %@", array);
}


然后在某个方法里面调用

[self addObj:@"hellow", @"thank you", nil];


// 轮胎注释

// 首先想象一下 你正在玩俄罗斯转盘。。。。然后开始

var_list argsList;

va_list// c语言中解决变参问题的一组宏,用于获取不确定个数的参数 ----- 百度百科

argsList// 把它想象成转盘上的指针


var_start(argsList, firstObj);// 一个游戏的开关,按下后指针将从转盘上的 firstObj开始转动

arg = va_arg(argsList, id);// 指针每转过一个对象的区域就会把,该指针所指的对象赋值给arg这个的对象。括号里的id是指针所指的对象的类型

va_end(argsList);// 当执行到这句话的时候,游戏就结束了


这时候项目正好修改了弹窗(UIAlertController)的样式,变成了一列下来的。


变成了~


而UIAlertView变成Controller后按钮的添加也变了。。。


// 联系电话弹窗
- (void)showCellphoneSelectionAlert:(NSString *)firstCellphone, ...
{
    // 增加拨打次数
    __weak typeof(self) weakSelf   = self;
    
    UIAlertController *alert;
    
    va_list argsList;
    va_start(argsList, firstCellphone);
    if (firstCellphone)
    {
        alert = [UIAlertController alertControllerWithTitle:Alert_Text_Cellphone_DefaultType
                                                    message:nil
                                             preferredStyle:UIAlertControllerStyleAlert];
        
        [alert addAction:[UIAlertAction actionWithTitle:firstCellphone style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
            //点击按钮的响应事件
            [weakSelf.addCallRecordVM addBusinessCalledRecordWithBusinessID:self.businessID];
            NSMutableString *str = [[NSMutableString alloc] initWithFormat:@"tel:%@", firstCellphone];
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
            
            // 存储
            [self saveCallHistoryTolocalDatabase];
        }]];
        
        NSString *backupCellphone;
        while ((backupCellphone = va_arg(argsList, NSString *)))
        {
            //依次取得所有参数
            [alert addAction:[UIAlertAction actionWithTitle:backupCellphone style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
                //点击按钮的响应事件
                [weakSelf.addCallRecordVM addBusinessCalledRecordWithBusinessID:self.businessID];
                NSMutableString *str = [[NSMutableString alloc] initWithFormat:@"tel:%@", backupCellphone];
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
                
                // 存储
                [self saveCallHistoryTolocalDatabase];
            }]];
        }
        [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
            //点击按钮的响应事件
        }]];
    }
    va_end(argsList);
    
    //弹出提示框
    if (alert)
    {
        [self presentViewController:alert animated:true completion:nil];
    }
}


调用

[self showCellphoneSelectionAlert:@"186451666666", @"1821645215", @"16487559525", nil];






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值