用元组替换函数参数

问题描述 投票:0回答:1

快速我一定是误会了

func test(_ x: 0, y: 0) { /* code */ }

let a = test
test(x: 1, y: 2) // This is ok

我正在尝试传递元组来代替参数。

a.(x: 0, y: 0) // Not ok
a.(0, 0) // Not ok

let b = (x: 1, y: 2)
a.b // This is also not ok

我希望使用可变参量和元组来实现类似这样的酷功能:

func test(_ x: Int...) { /* code */ }
test.(0)
test.(0, 0, 0)
test.(0, 1, 2, 3)

let tuple = (1, 1, 1, 1, 1)
test.tuple

我觉得这应该可行

swift function parameters tuples variadic
1个回答
0
投票

首先,您将参数传递给圆括号内的函数,而不是点(。)

如果您想将元组传递给函数,您可以像a((0,0))这样来做

如果您要将未知大小的元组传递给函数,则可以使用泛型。该解决方案的缺点是只能处理固定数量的元组长度。我想不出更好的方法...

例如:

func f<T>(_ arg : T) {
    if arg is (Int) { print ("1") }
    if arg is (Int, Int) { print ("2") }
    if arg is (Int, Int, Int) { print ("3") }
    ...
    if arg is (Int, Int, Int, Int, Int, Int, Int) { print ("7") }
}
let x = (1, 2)
f(x)
// prints 2
© www.soinside.com 2019 - 2024. All rights reserved.