将可变参数作为Swift中的数组传递

问题描述 投票:1回答:1

Java 5+允许将可变参数作为数组或单独传递。我期望Swift也允许将可变参数作为数组传递,但到目前为止还算不上运气。

这里是一个示例程序,我在操场上尝试过。它创建CVarArg的数组并将其传递给String(format:...)

let printData: [(format: String, param: [CVarArg])] =
    [(format: "This is blank", param: []),
     (format: "This is %@ %@", param: ["Swift", "language"])
   ]

for index in 0...1  {
    let pdata = printData[index]
    print (String(index+1) + " " + String(format: pdata.format, pdata.param))
}

我期望:

1 This is blank
2 This is Swift language

代替打印:

1 This is blank
2 This is (
    Swift,
    language
) (null)

尝试使用CVarArg ...作为类型:

let printData: [(format: String, param: CVarArg...)]

或桥接到CVarArg ...:

String(format: pdata.format, pdata.param as CVarArg...)

在两种情况下都出现编译错误。

是否有一种方法可以更改上述代码的语法,以允许以预期的方式解释[CVarArg]。

swift variadic-functions
1个回答
1
投票

我认为您的问题是元组不支持可变参数。所以

 (format: "This is %@ %@", param: ["Swift", "language"])

是由两部分组成的元组:一个字符串和一个数组,String(format:,_)将该数组视为一个对象。要解决您的直接问题,请使用String(format:,arguments:)。例如

String(format:,arguments:)

鉴于创建文字数组有多么容易,我想问是否需要在Swift的任何地方使用可变参数。

© www.soinside.com 2019 - 2024. All rights reserved.