美文网首页iOS 底层面试
Swift新特性元组(Tuple)和其关键字inout

Swift新特性元组(Tuple)和其关键字inout

作者: 请叫我小陈陈 | 来源:发表于2016-07-25 15:40 被阅读0次

前言

最近在看swift的开发tips,其中有一个自己比较感兴趣的就是多元组,打算和大家分享一下我理解中多元组的使用以及对关键字inout的理解。

元组的定义

元组是Objective-C中没有的数据结构,与数组类似,都是表示一组数据的集合。说到与数组类似,但是也有区别的地方:元组的长度任意,元组中数据可以是不同的数据类型。
元组的定义很简单的,用小括号括起来,里面的元素以逗号隔开,例如:

let user = ("小陈陈" ,true, 22)

元组的基本用法

1、可以通过索引去访问

let user = ("小陈陈" ,true, 22)
print(user.0)//小陈陈

2、可以把元组分解开,然后再去使用

let (name,isFemale,age) = user
print(name)//小陈陈

3、如果你只需要一部分的值,可以用“_”来代替忽略掉其他部分

let (name,_,_) = user
print(name)//小陈陈

4、上面的使用看起来有点繁琐,有个简化的方式就是定义的时候给每个元素单独命名

let user = (name:"小陈陈",isFemale:true,age:22)
print(user.name)//小陈陈
print(user.0)//小陈陈

inout的作用

声明函数时,在参数前面用inout修饰,在函数内部实现改变外部参数。
需要注意几点:
1、 只能传入变量,不能传入常量和字面量
2、传入的时候,在变量名字前面用&符号修饰表示
3、inout修饰的参数是不能有默认值的,有范围的参数集合也不能被修饰
4、一个参数一旦被inout修饰,就不能再被var和let修饰了
在Swift中inout参数前面使用的&符号可能会给你一种它是传递引用的印象,但是事实并非如此,引用官方的话就是:

inout参数将一个值传递给函数,函数可以改变这个值,然后将原来的值替换掉,并从函数中传出

元组和inout的运用

前面是我对元组简单的一个理解,有了这样的认识之后再去看Swifter里面讲解的多元组的时候就会容易理解。里面举了一个例子是交换输入,普通的程序员普遍的写法:

func swapMe<T>(a: inout T, b: inout T) {
    let temp = a
    a=b
    b = temp
}

使用多元组之后的写法:

func swapMe<T>(a: inout T, b: inout T) {
    (a,b) = (b,a)
}

两个方法达到的目的是一样的,但是他们的实现方法是不一样。最大的区别就是第一个方法开辟了一个额外的空间来完成交换,而使用元组的方法则不去开辟一个额外的空间。他们的调用方法是一样的

var a: Int = 1
var b: Int = 2
swapMe(a: &a, b: &b)
print(a,b)//2,1

如果大家对inout的功能还存在疑惑的地方,我们换一种写法来比较一下:

func swapMe<T>( a: T, b: T){
    var b = b
    var a = a
    (a,b) = (b,a)
    print(a,b)//1,2
}
swapMe(a: a, b: b)
print(a,b)//2,1

在参数前面用inout修饰的方法,在函数内部实现改变外部参数。参数前面没有用inout修饰的方法,在函数执行体里面确实是交换了两个数,但是外部的参数是没有改变。

总结

这次的学习总结写的有点杂,对于元组,我还是推荐大家多使用。但是关键字inout大家就要慎用了,毕竟他会直接改变你外部参数的值,有利也有弊。

相关文章

  • Swift新特性元组(Tuple)和其关键字inout

    前言 最近在看swift的开发tips,其中有一个自己比较感兴趣的就是多元组,打算和大家分享一下我理解中多元组的使...

  • C#元组的使用

    元组(Tuple)是在C# 4.0时出的新特性,需要.Net Framework 4.0以上版本支持。 元组...

  • 3.python元组常用方法

    一、简述 元组(tuple)的用法和list基本一样,但是,元组不能删除修改,这是元组最关键的特性 元组可以做为字...

  • swift -tuple(元组)

    swift中使用元组 可以看到divided返回了一个元组,将其大的矩形分为两部分了 如实现类似的效果

  • Swift元组(Tuple)

    元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。 例如:let htt...

  • swift 元组 (Tuple)

    元组的声明 输出结果 元组解包 输出结果 元组的分量 输出结果 命名元组分量 输出结果 使用_忽略元组分量

  • Swift 元组 (Tuple)

    定义元组 获取元组内容 修改元组 元组分解 元组作为函数返回值 通常可以用元组来为函数返回多个返回值。

  • Swift 元组(Tuple)

    元组类型,用于在单个复合值中对多个值进行分组 元组中的值可以是任何类型,并且不需要是相同类型 声明: 元组声明的语...

  • Swift元组:Tuple

    元组的概念在OC中没有 元组可以把多个值和合并成单一的复合型的值 元组内的值可以是任何类型,而且可以不必是同一类型...

  • 一 -20 python (基础)元组常用操作

    元组(tuple)=========元素不能修改 序号 分类 关键字 / 函数 / 方法 ...

网友评论

    本文标题:Swift新特性元组(Tuple)和其关键字inout

    本文链接:https://www.haomeiwen.com/subject/fkigjttx.html