2017-04-15 75 views
0

在Objective-C中拥有十年的经验后,我正在学习Swift3.0。元组作为参数/参数或返回值的问题

在处理元组时,我发现将多个值组合在一起是很有趣的。一旦我开始将它与Obj-C的struct进行比较。

但是,当它传递给一个函数或从函数返回时,fanciness成为一个痛苦的屁股!

你不能

  1. return整个元组
  2. 通元组为单值

在这两个,你必须把它打入个人数据类型的案件。

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

+0

这个问题怎么回事Objective-C相关? Obj-C没有元组... – Hamish

+0

@Hamish:因为我将它与Obj-C或'C'的'struct'进行了比较。 –

+1

但是你的问题(据我所知)并不是关于Swift元组和(Obj-)C结构之间的比较 - 它纯粹是关于你可以做什么以及不能做什么的Swift元组。 – Hamish

回答

1

下面是使用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) 
+0

感谢您通过使用别名来减少代码。 +1 –

+0

不客气,很高兴我能帮到你。 – Yasir

0

随着哈米什提供的方向,我知道绑定到一个单一的值"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))") 
+0

@Yasir:为什么不粘贴它作为答案?但为什么字符串应该是别名,不是吗? –

+0

字符串的道歉;正在检查一些代码以确保语法是正确的,并最终使用示例类型而不是你的!在我发布之后意识到这有点复杂,因此提交了代码答案。 – Yasir