今天我只是通过一些基本的快速概念,并正在使用一些例子来理解这些概念。现在我已经完成了元组学习。
我有一个疑问,即使用元组有什么需要?我在这里做了一些挖掘,这就是我得到的:
我们可以从函数返回多个值。好的,但我们也可以通过返回一个数组来做到这一点。
数组正常但我们可以返回不同类型的多个值。好的很酷,但这也可以通过AnyObject数组完成:
func calculateStatistics (scores:[Int])->[AnyObject]
{
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores
{
if score > max{
max = score
}
else if score < min{
min = score
}
sum += score
}
return [min,max,"Hello"]
}
let statistics = calculateStatistics([25,39,78,66,74,80])
var min = statistics[0]
var max = statistics[1]
var msg = statistics[2] // Contains hello
我们可以命名元组中存在的对象。好的,但我可以使用AnyObject的字典。
我不是说为什么在我们得到这个时使用元组。但是应该有一些只有元组可以做到的东西,或者只有元组才能做到这一点。而且,如果没有充分的理由,创造swift的人就不会迅速参与元组。所以应该有一些很好的理由让他们参与其中。
所以大家请告诉我,如果有任何特定情况,元组是最好的选择。
提前致谢。
答案 0 :(得分:59)
元组是可以以多种方式使用的匿名结构,其中之一是使函数中的多个值更容易返回。
使用元组而不是数组的优点是:
[AnyObject]
)赋值更容易,更灵活 - 例如,可以将返回值赋给元组:
let tuple = functionReturningTuple()
或所有参数都可以自动提取并分配给变量
let (param1, param2, param3) = functionReturningTuple()
并且可以忽略某些值
let (param1, _, _) = functionReturningTuple()
与函数参数的相似性:调用函数时,传递的参数实际上是一个元组。例如:
// SWIFT 2
func doSomething(number: Int, text: String) {
println("\(number): \(text)")
}
doSomething(1, "one")
// SWIFT 3
func doSomething(number: Int, text: String) {
print("\(number): \(text)")
}
doSomething(number: 1, text: "one")
(在Swift 2中不推荐)该函数也可以调用为:
let params = (1, "one")
doSomething(params)
这个列表可能并不详尽,但我认为有足够的优势让你更喜欢使用元组来返回多个值
答案 1 :(得分:11)
例如,请考虑以下简单示例:
enum MyType {
case A, B, C
}
func foo() -> (MyType, Int, String) {
// ...
return (.B, 42, "bar")
}
let (type, amount, desc) = foo()
使用Array
获得相同的结果,您必须这样做:
func foo() -> [Any] {
// ...
return [MyType.B, 42, "bar"]
}
let result = foo()
let type = result[0] as MyType, amount = result[1] as Int, desc = result[2] as String
元组更简单,更安全,不是吗?
答案 2 :(得分:5)
元组是一种比异构阵列更轻的数据结构。虽然它们非常相似,但在通过索引访问元素时,优点是可以在Swift中非常容易地构造元组。引入/插入此(元组)数据结构的意图是多种返回类型。从“被叫者”中返回多个数据&#39;只需很少的努力,这就是拥有元组的优势。希望这有帮助!
答案 3 :(得分:0)
一个元组理想地用于从一个函数返回多个命名数据以供临时使用。如果元组的范围在整个程序中是持久的,则可能需要将该数据结构建模为类或结构。