gpt4 book ai didi

swift - 在 Swift 中将可变参数作为数组传递

转载 作者:行者123 更新时间:2023-12-04 10:52:33 24 4
gpt4 key购买 nike

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

这是一个示例程序,我在 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]。

最佳答案

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

 (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 中的任何地方使用可变参数。

关于swift - 在 Swift 中将可变参数作为数组传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59405828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com