Замена Fun c параметра на кортеж - PullRequest
0 голосов
/ 29 апреля 2020

Свифт
Должно быть, я что-то неправильно понимаю

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

Я надеюсь использовать вариади c Параметры и кортежи для чего-то крутого, как это:

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

Я чувствую, что это должно работать

1 Ответ

1 голос
/ 29 апреля 2020

сначала вы передаете параметры в функцию внутри круглых скобок, а не с точкой (.)

, если вы хотите передать кортеж в функцию, которую вы делаете так 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
...