Swift 元组

时间:2020-02-23 14:44:05  来源:igfitidea点击:

Swift元组是容纳多个值的容器。
Swift数组在很大程度上是同类数据类型。
元组不是这样。
让我们开始使用XCode启动Swift Playground。

Swift 元组

元组可以容纳零个或者多个值。
这些值不必是同一类型。
Swift中的元组就像迷你结构,应仅用于存储临时值。
当我们必须从一个函数返回多个值时,元组很方便。

创建一个元组

元组中的值以逗号分隔,如下所示。

var firstTuple = ("Anupam Chugh","theitroad.local")
print(firstTuple.0)
print(firstTuple.1)
print(type(of: firstTuple))
  • 创建元组类似于定义变量。
    我们需要做的就是设置括号中用逗号分隔的值。

  • 元组的类型是从定义本身推断出来的。

  • Swift元组的类型是其所有值的类型。

  • 要从元组访问值,我们需要使用点语法,后跟值的索引。

  • 代替使用索引访问元素,我们可以将名称设置为元组元素。

为了定义一个空的元组,您只需要做:var voidTuple =()
类型为(Void)

我们可以通过定义如下所示的类型来创建元组:

var tuple : (Int, Bool) = (2,false)

Swift元组元素名称

我们可以像在Swift函数中命名参数一样命名元组的每个元素

var namedTuple = (blogger: "Anupam Chugh",tutorial: "Swift Tuples", year : 2016)
print(namedTuple.blogger)
print(namedTuple.tutorial)
print(namedTuple.year)

上面的元组的类型是(String,String,Int)

分解Swift元组

我们可以从元组中检索值并将其设置为变量和常量。
这称为分解元组。

var (name, website) = firstTuple
let (b, t, y) = namedTuple
let(_,websiteName) = firstTuple
  • 设置下划线表示您从元组中忽略了该值。

  • 这是从元组定义多个变量和常量的好方法。

  • " let"语句中定义的常量无法修改。

使用上述方法,我们还可以同时分配多个值。

(name, website) = ("hyman", "theitroad.local")

使用Swift Tuples交换两个元素

假设它们具有相同的类型,我们可以使用元组交换两个变量中的值

var i = 10
var j = 20
(i,j) = (j,i)
print("i is \(i) j is \(j)") //prints i is 20 j is 10

Swift元组是值类型

Swift中的元组是值类型,而不是引用类型。

var origin = (x: 0,y: 0,z: 0)
var newOrigin:(Int,Int,Int) = origin

newOrigin.0 = 1
newOrigin.1 = 5
newOrigin.2 = 10

print(origin) //"(x: 0, y: 0, z: 0)\n"
print(newOrigin) //"(1, 5, 10)\n"

从上面的示例可以明显看出,新元组中更改的值对从中复制值的较早值没有影响。

注意:let元组中的值不能被修改。

另一个元组中的Swift元组

元组是复合类型。
一个元组可以嵌套在另一个中。

var nestedTuple = (("Swift","Swift tuples tutorial"),("Android","Android Volley Tutorial"))
nestedTuple.0.1 //Swift tuples tutorial

从函数返回多个值

使用Swift元组,我们可以从一个函数返回多个值,如下所示。

func sumOfTwo(first a: Int, second b: Int) -> (Int,Int,Int)
{
  return(a,b,a+b)
}

var returnedTuple = sumOfTwo(first: 2, second: 3)
returnedTuple.2 //5

要在返回的元组中设置元素名称,我们需要在元组类型定义本身中显式设置它们。

var returnedTuple : (first: Int, second: Int, sum: Int) = sumOfTwo(first: 2, second: 3)
print(returnTuple.first) //3
print(returnTuple.second) //3
print(returnTuple.sum) //5