Q:

Passing variadic arguments as an array in Swift

Java 5+ allows passing variadic arguments either as an array, or individually. I expected Swift to allow passing variadic arguments as an array as well, but have no luck so far.
Here is a sample program, I tried in a playground. It creates an array of CVarArg and passes it to 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))
}

I expected:
1 This is blank
2 This is Swift language

Instead it prints:
1 This is blank
2 This is (
    Swift,
    language
) (null)

Tried  using CVarArg... as a type:
let printData: [(format: String, param: CVarArg...)]

or bridging to CVarArg... :
String(format: pdata.format, pdata.param as CVarArg...)

In both cases I get compilation errors.
Is there a way to change the syntax of the above code to allow interpreting [CVarArg] in the expected way.

A:

I think your problem is that tuples do not support variadic arguments. So
 (format: "This is %@ %@", param: ["Swift", "language"])

is a tuple of two things: a string and an array and String(format:,_) sees the array as only one object. To solve your immediate problem, use String(format:,arguments:). e.g.
for index in 0...1  {
    let pdata = printData[index]
    print (String(index+1) + " " + String(format: pdata.format, arguments: pdata.param))
}

Given how easy it is to create a literal array, I'd question the need to use variadic arguments anywhere in Swift. 

