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]。
我认为您的问题是元组不支持可变参数。所以
(format: "This is %@ %@", param: ["Swift", "language"])
是由两部分组成的元组:一个字符串和一个数组,String(format:,_)
将该数组视为一个对象。要解决您的直接问题,请使用String(format:,arguments:)
。例如
String(format:,arguments:)
鉴于创建文字数组有多么容易,我想问是否需要在Swift的任何地方使用可变参数。