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协议
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容