Как назначить выходы функции с несколькими выходами для различных функций в Swift? - PullRequest
0 голосов
/ 07 сентября 2018

Например:

func createArray(_ oneArray: [Int],_ twoArray: [Int],_ threeArray: [Int],_ one: Int,_ two: Int,_ three: Int) -> (oneArrayNew: [Int], twoArrayNew: [Int], threeArrayNew: [Int]){

    // ...
    // ... *random code*
    // ...
    // ...

    return (oneArrayNew, twoArrayNew, threeArrayNew)

}

Если бы я хотел снова вызвать эту функцию, используя мои выходы первого вызова (oneArrayNew, twoArrayNew, threeArrayNew) в качестве входов, использующих ту же функцию, как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я полагаю, вы говорите о кортежах здесь. Вот пример.

func blah(x: Int, y: Int) -> (a: Int, b: Int) {
    return (x,y)
}

let output = blah(1,1)

print(output.0, output.b) // You can access them using indices or the variable names. If they don't have names, you'll have to use indices.

А что касается передачи кортежа в качестве входного, он был устарел в Swift 2, а затем удален в Swift 3. Таким образом, у вас нет другого способа, как передать параметры по отдельности.

blah(output.a, output.b)

Или вы можете даже использовать несколько переменных, как показано в @ vacawama answer .

0 голосов
/ 07 сентября 2018

Вы можете назначить кортеж переменной, такой как result, и затем получить доступ к каждому члену:

let result = createArray(...
let result2 = createArray(result.oneArrayNew, result.twoArrayNew, ...

или вы можете присвоить результат вызова кортежу для создания трех новых переменных:

let (a1, a2, a3) = createArray(...
let result2 = createArray(a1, a2, a3, ...

или даже повторно использовать существующие переменные:

var (a1, a2, a3) = createArray(...
(a1, a2, a3) = createArray(a1, a2, a3, ...

Полный пример:

Я реализовал вашу функцию для создания новых массивов, удалив первые N элементов из каждого массива.

Попробуйте это на детской площадке:

func createArray(_ oneArray: [Int],_ twoArray: [Int],_ threeArray: [Int],_ one: Int,_ two: Int,_ three: Int) -> (oneArrayNew: [Int], twoArrayNew: [Int], threeArrayNew: [Int]){

    let oneArrayNew = Array(oneArray.dropFirst(one))
    let twoArrayNew = Array(twoArray.dropFirst(two))
    let threeArrayNew = Array(threeArray.dropFirst(three))

    return (oneArrayNew, twoArrayNew, threeArrayNew)
}

let result = createArray([1,2,3,4], [5,6,7,8], [9,10,11,12], 1, 2, 3)
print(result.oneArrayNew)    // [2, 3, 4]
print(result.twoArrayNew)    // [7, 8]
print(result.threeArrayNew)  // [12]

var (a1, a2, a3) = createArray([1,2,3,4], [5,6,7,8], [9,10,11,12], 2, 2, 2)
print(a1)  // [3, 4]
print(a2)  // [7, 8]
print(a3)  // [11, 12]

(a1, a2, a3) = createArray(a1, a2, a3, 1, 1, 1)
print(a1)  // [4]
print(a2)  // [8]
print(a3)  // [12]
...