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.count
,for i in args
。
【讨论】:
以上是关于Swift 中的可变参数方法的主要内容,如果未能解决你的问题,请参考以下文章