如何在swift中传递可变参数?
我知道我可以直接调用print,但为什么要将项传递给另一个函数,使其像数组一样包装?我想知道为什么以及如何修复它如何在swift中传递可变参数?,swift,Swift,我知道我可以直接调用print,但为什么要将项传递给另一个函数,使其像数组一样包装?我想知道为什么以及如何修复它 func test(items:Any...) { print(items) } test(1,2,3) // print [1,2,3] print(1, 2,3) // print 1 2 3 如何使测试函数像打印函数一样工作?编辑:啊,我不明白你的问题。Swift不是用Swift编写的,因此不能用相同的方式定义func。从文档中 传递给可变参数的值在 函数体
func test(items:Any...) {
print(items)
}
test(1,2,3) // print [1,2,3]
print(1, 2,3) // print 1 2 3
如何使测试函数像打印函数一样工作?编辑:啊,我不明白你的问题。Swift不是用Swift编写的,因此不能用相同的方式定义func。从文档中 传递给可变参数的值在 函数体作为适当类型的数组 如果您确实传递了一个数组进行打印,您将获得与使用Swift func时相同的效果。i、 e
print(1, 2, 3) - prints 1 2 3
print([1, 2, 3]) - prints [1, 2, 3]
此外,下面打印的是“数组”
因为在Swift中,使用变量参数定义func的唯一选择是“…”,我认为这意味着不能用与print相同的方式定义func。因此,如果您需要相同的结果,您唯一的选择是通过将数组转换为字符串并用空格连接来模拟它。你的问题是理论性的还是有特定的目标
========
我不确定我是否理解你的问题,因为以下方法有效:
func printIt(args: Any...) {
print(args)
}
printIt(args: 1, 2, 3)
或者,如果不想传递参数名称:
func printIt(_ args: Any...) {
print(args)
}
printIt(1, 2, 3)
如果您想让
测试
执行与打印
相同的操作,为什么不直接调用打印
func test(args: Any...) {
print(args)
}
如果你不被允许/不想使用这个小把戏,你可以试试这个。但这仅适用于CustomStringConvertible
:
func test(args: CustomStringConvertible...) {
print(args.map {
$0.description
}.joinWithSeparator(" "))
}
最后,我将测试包装如下:
func test( items:Any...) {
for num in items {
print("\(num) ", separator:" ", terminator:"")
}
print("")
}
这很好,但还有更好的解决方案吗?对于items{print(num)}中的num,请尝试this@ShobhakarTiwari谢谢,这能回答你的问题吗?
打印(\uitems:Any…,separator:String=“”,terminator:String=“\n”)
是用Swift编写的。它实际上并没有回答这个问题:为什么它被数组包装。
func test( items:Any...) {
for num in items {
print("\(num) ", separator:" ", terminator:"")
}
print("")
}