Java 5+ 允许将可变参数作为数组或单独传递。我期望 Swift 也能像 Java 一样允许将可变参数作为数组传递,但目前还没有成功。
下面是一个示例程序,在 playground 中尝试运行。它创建了一个 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]。