【问题标题】:Variadic method in SwiftSwift 中的可变参数方法
【发布时间】: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 的参数列表的最佳做法是什么?非常感谢您的帮助。

【问题讨论】:

    标签: objective-c swift


    【解决方案1】:

    怎么样

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

    【讨论】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 2016-07-18
      • 2020-02-14
      • 2014-08-03
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多