zoukankan      html  css  js  c++  java
  • Swift-技巧(三)使用元组(tuple)

    最近看 iOS 的官方功能的 Demo 时,发现代码中使用元组的地方很多,所以兴趣上来,查了下元组的出处。

    在苹果的文档中就只有简短的两句,使用元组创建一个组合的值,从函数中返回多个值。元组中的可以使用属性值或者索引引用

    Apple Documentation

    Use a tuple to make a compound value, to return multiple values from a function. The elements of a tuple can be referred to either by name or by number.

    语句越是简短,传达的信息越是多啊,在查找其他大佬对元组的介绍时,比较认同其中一个大佬的理解:把元组看作是微型 Struct 或者 Struct List,应该在最小的范围内使用,然后被释放也就是元组是值传递,而不是引用

    元组包括 StringIntegerBool,甚至是元组类型都可以:

    // 创建元组
    let foo = (0, false, 'Hello')
    

    也可以在创建元组时,定义值类型:

    let foo: (Int, Bool, String) = (0, false, 'Hello')
    

    在使用的时候可以通过索引获取:

    print(foo.0) // print: "0"
    print(foo.1) // print: "false"
    print(foo.2) // print: "Hello"
    

    也可以通过属性值去获取值:

    // 创建元组
    let person = (age: 20, isTall: false, name: "tam")
    
    print(person.age) // print: "20"
    print(person.isTall) // print: "false"
    print(person.name) // print: "tam"
    

    哪里可以使用元组?

    当函数需要返回多个不同类型的值时,是使用元组最好的时候。可以使用 typealias 去定义一个元组类型,并给到函数处理,比如下面代码:

    typealias Person = (age: Int, isTall: Bool, name: String)
    
    func getMultipleValues() -> Person {
      
      	let person: Person = (age: 20, isTall: false, name: "tam")
      	return person
    }
    
    let person = getMultipleValues()
    
    print(person.age) // print: "20"
    print(person.isTall) // print: "false"
    print(person.name) // print: "tam"
    

    发现

    如果使用 Swift 开发时,也在不知不觉中接触到元组,先看下面三个函数:

    func functionA() -> Void { }
    
    func functionB() -> () { }
    
    func functionC() { }
    

    functionA() 是创建函数的标准样式,functionB 的返回值是元组 ()functionC() 通过完全省略返回类型。

    由此可推断,typealias Void = (),实际上就是一个空的元组。所以,元组也可以是空的

    题外话

    时间仓促,说的东西可能不全面,在你实现过程中遇到什么问题,评论区给我留言,我会尽快回复

  • 相关阅读:
    【算法笔记】B1015 德才论
    【算法笔记】B1014 福尔摩斯的约会
    【算法笔记】B1013 数素数
    【算法笔记】B1012 数字分类
    【算法笔记】B1011 A+B 和 C
    【算法笔记】B1010 一元多项式求导
    【算法笔记】B1009 说反话
    【算法笔记】B1008 数组元素循环右移问题
    SSLOJ 1336.膜拜神牛
    SSLOJ 1335.蛋糕切割
  • 原文地址:https://www.cnblogs.com/shsuper/p/15506691.html
Copyright © 2011-2022 走看看