元组作为参数/参数或返回值的问题

时间:2017-04-15 09:06:37

标签: swift tuples

在Objective-C有十年经验之后,我正在学习Swift3.0。

在使用元组时,我发现将多个值组合在一起非常有用。我开始将它与Obj-C的struct进行比较。

但是在将它传递给函数或从函数返回时,幻想变成了屁股的痛苦!

你不能

  1. return整个元组
  2. 将元组作为单个值传递
  3. 在这两种情况下,您都必须将其分解为单独的数据类型。

    我是否从上述观察中得到了正确的结果?

2 个答案:

答案 0 :(得分:2)

以下是使用typealias的解决方案,因此您不必反复使用元组:

typealias Complex = (Int, Int)

var complex1 = (2, 4)
var complex2 = (3, 5)

func addComplexNumbers(c1:Complex, c2:Complex) -> Complex {
    let sum = (c1.0 + c2.0, c1.1 + c2.1)
    return sum
}

print("Sum = \(addComplexNumbers(c1:complex1, c2:complex2))")

如果您打算单独检索值,也可以在元组中使用命名参数:

typealias Complex = (x: Int, y: Int)

答案 1 :(得分:0)

根据Hamish提供的方向,我知道绑定到一个名为"splatting" is purposefully removed的值。在传递四个值而不是两个值之间看起来有些差不多。

但是我们可以通过以下方式使用:

//This is an example of Complex number.
// 2+4i adding with 3+5i will become 5+9i

var complex1 = (2, 4)
var complex2 = (3, 5)

func addComplexNumbers(c1:(Int, Int), c2:(Int, Int)) -> (Int, Int){
    let sum = (c1.0+c2.0, c1.1+c2.1)
    return sum
}

print("Sum = \(addComplexNumbers(c1:complex1, c2:complex2))")