用元组替换 Func 参数
Replacing Func Parameter with Tuple
Swift
我一定是误会了什么
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
我觉得这应该行得通
首先,您将参数传递给圆括号内的函数,而不是使用点 (.)
如果你想将元组传递给一个函数,你可以这样做 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
Swift
我一定是误会了什么
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
我觉得这应该行得通
首先,您将参数传递给圆括号内的函数,而不是使用点 (.)
如果你想将元组传递给一个函数,你可以这样做 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