在 Swift 中将可变参数作为数组传递
Passing variadic arguments as an array in Swift
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...:[=18=]
String(format: pdata.format, pdata.param as CVarArg...)
在这两种情况下我都会遇到编译错误。
有没有办法更改上述代码的语法以允许以预期的方式解释 [CVarArg]。
我认为你的问题是元组不支持可变参数。所以
(format: "This is %@ %@", param: ["Swift", "language"])
是两个元组:一个字符串和一个数组,String(format:,_)
将数组视为唯一一个对象。要解决您眼前的问题,请使用 String(format:,arguments:)
。例如
for index in 0...1 {
let pdata = printData[index]
print (String(index+1) + " " + String(format: pdata.format, arguments: pdata.param))
}
鉴于创建文字数组是多么容易,我质疑是否需要在 Swift 中的任何地方使用可变参数。
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...:[=18=]
String(format: pdata.format, pdata.param as CVarArg...)
在这两种情况下我都会遇到编译错误。
有没有办法更改上述代码的语法以允许以预期的方式解释 [CVarArg]。
我认为你的问题是元组不支持可变参数。所以
(format: "This is %@ %@", param: ["Swift", "language"])
是两个元组:一个字符串和一个数组,String(format:,_)
将数组视为唯一一个对象。要解决您眼前的问题,请使用 String(format:,arguments:)
。例如
for index in 0...1 {
let pdata = printData[index]
print (String(index+1) + " " + String(format: pdata.format, arguments: pdata.param))
}
鉴于创建文字数组是多么容易,我质疑是否需要在 Swift 中的任何地方使用可变参数。