Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在swift中传递可变参数?_Swift - Fatal编程技术网

如何在swift中传递可变参数?

如何在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。从文档中 传递给可变参数的值在 函数体

我知道我可以直接调用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。从文档中

传递给可变参数的值在 函数体作为适当类型的数组

如果您确实传递了一个数组进行打印,您将获得与使用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("")
}