在Objective-C中拥有十年的经验后,我正在学习Swift3.0。元组作为参数/参数或返回值的问题
在处理元组时,我发现将多个值组合在一起是很有趣的。一旦我开始将它与Obj-C的struct
进行比较。
但是,当它传递给一个函数或从函数返回时,fanciness成为一个痛苦的屁股!
你不能
return
整个元组- 通元组为单值
在这两个,你必须把它打入个人数据类型的案件。
我是否从上述观察中得到了正确的结论?
在Objective-C中拥有十年的经验后,我正在学习Swift3.0。元组作为参数/参数或返回值的问题
在处理元组时,我发现将多个值组合在一起是很有趣的。一旦我开始将它与Obj-C的struct
进行比较。
但是,当它传递给一个函数或从函数返回时,fanciness成为一个痛苦的屁股!
你不能
return
整个元组在这两个,你必须把它打入个人数据类型的案件。
我是否从上述观察中得到了正确的结论?
下面是使用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 –
不客气,很高兴我能帮到你。 – Yasir
随着哈米什提供的方向,我知道绑定到一个单一的值"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))")
@Yasir:为什么不粘贴它作为答案?但为什么字符串应该是别名,不是吗? –
字符串的道歉;正在检查一些代码以确保语法是正确的,并最终使用示例类型而不是你的!在我发布之后意识到这有点复杂,因此提交了代码答案。 – Yasir
这个问题怎么回事Objective-C相关? Obj-C没有元组... – Hamish
@Hamish:因为我将它与Obj-C或'C'的'struct'进行了比较。 –
但是你的问题(据我所知)并不是关于Swift元组和(Obj-)C结构之间的比较 - 它纯粹是关于你可以做什么以及不能做什么的Swift元组。 – Hamish