swift4.0 元组

元组是swift编程语言中唯一的一种复合类型,他可以将指定有限个数的任何类型一次整理为一个对象,元组中的每一种类型都可以是任何的结构体、枚举或类类型,甚至也可以是一个元组以及空元组。元组中的每个元素我们称为一个“分量”

eg:
      enum MyEnum {
            case one, two, three
      }
 
      class MyClass {
            var member = 0
      }”

第一节:访问元组中的元素

如果我们要访问元组中的元素,可以使用成员访问操作符 . ,后面跟元素的索引位置(从0开始计)

eg:
      //声明一个元组常量tuple,类型为(Int, Double, Bool)
      let tuple = (10, 0.5, false) 

      //访问元组中的第一个元素
      //这里的常量a的值为10
      let a = tuple.0

我们也可以给元组指定标签,通过访问标签来访问元素

eg:
      //声明一个元组常量tuple,其类型为:(int:  Int, double: Double,bool: Bool)
     let tuple = (int: 10, double: 0.5, bool: false)
    
      //访问元组中的第一个元素
      //这里的常量a的值为10
      let a = tuple.int

注意: 一旦一个元组的某个元素带上标签,那么该元组类型相应的位置上也必须加上标签,一个元组中不需要给所有的元素都加上标签,可以加一部分,指定标签的元素,我们可以通过索引位置访问也可以通过标签访问; 元组往往用于一个函数返回多个不同类型的对象的场合。

第二节:元组分解

我们能很容易的定义一个元组对象,我们也可以很容易的同时萃取一个元组中的相应元素,这也被称为元组分解。
我们在做元组分解时,将几个变量或常量以元组定的方式声明出来,然后=右边元组相应的元素就能赋值给=左边相应的变量或常量了。

eg:
      // 声明一个元组常量tuple
      let tuple = (10, 0.5, true)

      //这里同时声明三个常量:a, b, c
      //tuple的第一个元素对 a 初始化,b, c同理
      let (a, b, c) = tuple

       // 如果我们不想萃取元组中的某个元素,用_代替
       // a的值为:5.5, c的值为:false
       let(a, _, c) = (5.5, "hello", false)

       // 因为元组分解这一语法特性,可以通过元组字面量来交换两个对象的值
       // 定义 a和b两个Int类型对象
       var a = 1, b = 2
       // 交换两个对象的值,a = 2, b = 1
       (a, b) = (b, a)

注意:上面代码 let (a, b, c) 不是在声明元组,而是同时声明三个常量,用于萃取一个元组中的值,元组也可以看作一个对象,上面的tuple就是名副其实的一个元组对象

第三节:元组比较

两个相同元素类型的元组,如果每个元素都遵循了Equatable协议,那么这两个元组可以用==, !=操作符来判断两者是否相等,如果两个元组中的每个元素的值对应都相等,则这两个元组对象相等,否则不等。

eg:
       let t1 = (1, 2, 3)
       let t2 = (1, 2, 3)
       //判断元组 t1和t2 是否相等,结果为:true
       print("t1 == t2? \(t1 == t2)")

如果每个元素都遵循Comparable协议,那么这两个元组可以用<, <=, >, >=操作符来比较,从第一个元素开始比较,有结果立即返回结果,否则依次进行比较下去。

eg:
       let t3 = (6, 9, 3, 4)
       let t4 = (6, 2, 5, 8)
       //判断元组 t3和t4 是否为小于关系,结果为:false
       //因为t3的第二个元素大于t4的第二个元素
       print("t3 < t4? \(t3 < t4)")

注意:这里t1和t3比较,会直接报错,因为不属于同一个类型

eg:
       let t5 = (true, 9, 3, 4)
       let t6 = (false, 2, 5, 8)
       这里的t5和t6比较也会报错,虽然元组类型一样,因为Bool类型不遵循comparable协议

你可能感兴趣的:(swift4.0 元组)