Swift 中的可变参数方法

Posted

技术标签:

【中文标题】Swift 中的可变参数方法【英文标题】:Variadic method in Swift 【发布时间】:2016-08-11 09:12:16 【问题描述】:

目标 C 代码:

- (instancetype)initWithInts:(int32_t)int1, ... 
    va_list args;
    va_start(args, int1);
    unsigned int length = 0;
    for (int32_t i = int1; i != -1; i = va_arg(args, int)) 
        length ++;
    
    va_end(args);
    ...
    ...
    return self;

此代码用于计算方法的参数个数。

Swift 代码:

convenience init(ints: Int32, _ args: CVarArgType...) 
    var length: UInt = 0
    self.init(length: args.count)
    withVaList(args,  _ in
        // How to increase length' value in loop?
    )

使用withVaList 循环使用CVaListPointer 的参数列表的最佳做法是什么?非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

怎么样

convenience init(args: Int...) 
  return args.count

【讨论】:

如果我需要访问 va_list 中元素的索引怎么办?喜欢做类似array[i++] = arg; 你的意思是在循环时?在这种情况下,您循环遍历ints.enumerate(),这也为您提供了索引。见***.com/questions/24028421/… 可能是args,而不是ints【参考方案2】:
convenience required init(args: Int32...) 


如果你在三个点... 后面定义你的func 参数,你会注意到args 实际上是一个[Int32] 类型。

所以只要投喜欢Array,即args.countfor i in args

【讨论】:

以上是关于Swift 中的可变参数方法的主要内容,如果未能解决你的问题,请参考以下文章

Swift基础知识碎片

Swift基础知识碎片

UIView 绘制函数 Swift 的可变参数

Swift3中方法可变参数语法的一些改变

带有可变参数的 Swift 和 C 回调

swift中函数可变参数的使用