我知道我可以直接调用print,但是为什么将项目传递给另一个函数会让它像Array一样包装?我想知道为什么以及如何解决它
func test(items:Any...) {
print(items)
}
test(1,2,3) // print [1,2,3]
print(1, 2,3) // print 1 2 3
如何使测试功能像打印功能一样?
答案 0 :(得分:2)
最后,我像这样包装测试:
func test( items:Any...) {
for num in items {
print("\(num) ", separator:" ", terminator:"")
}
print("")
}
这很好,但是有更好的解决方案吗?
答案 1 :(得分:1)
如果您想让test
与print
做同样的事情,为什么不拨打print
?
func test(args: Any...) {
print(args)
}
如果您不被允许/不想使用这个小技巧,您可以试试这个。但这仅适用于CustomStringConvertible
:
func test(args: CustomStringConvertible...) {
print(args.map {
$0.description
}.joinWithSeparator(" "))
}
答案 2 :(得分:-1)
传递给可变参数的值在其中可用 函数的主体作为适当类型的数组。
如果您确实传递了一个数组进行打印,那么您将获得与使用Swift函数看到的效果相同的效果。即。
print(1, 2, 3) - prints 1 2 3
print([1, 2, 3]) - prints [1, 2, 3]
此外,以下打印“Array< Any>”。
func printIt(_ args: Any...) {
print(type(of: args))
}
因为在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)