美文网首页
swift之inout关键字

swift之inout关键字

作者: 困惑困惑困惑 | 来源:发表于2018-10-09 11:24 被阅读51次

在swift中,我们常常对数据进行一些处理。因为swift的计算属性,所以如果不是大量重复性处理,基本可以在set及didSet中改变原数据的一些状态。但需要用到同样的算法处理大量数据的时候,仍然需要写方法来解决。在如C一类的传统语言中,指针变量能轻易帮我们处理并直接修改掉原数据,而apple本身期望siwft中尽量减少指针的出现,因此,swift常规方法中经常用到的是值传递。值传递最明显的后果便是无法对原数据进行直接修改。如果我们需要处理后的数据结果,那么就需要重新定义一个变量来接收值。在原数据被废弃的情况下,这样既增多了代码量,也产生了空间大量浪费。因此 siwft提供了关键字修饰inout来申明数据地址传递,也称之为引用传递。在siwft3.0中 inout的位置发生了改变,处于标签位置,不过其作用相同。具体作用如下图代码:

1054871-20161101194020768-63154305.png

以上代码是一个简单的冒泡排序。输出内容分别是排序结果和经过第一次、第二次调用方法后的原始数据。认真看一下代码的不同,就能很轻易的了解inout的作用了。在没有经过inout修饰参数中,传入数组,对数组进行排序。但无法影响原数组。当我们需要对处理后的数据结果进行操作的时候,就不得不定义新的变量来存储处理后的数组结果,而在第二个排序方法中,传入的是需要排序的数组地址,导致数组本身被影响,其原值也被修改。如果需要对结果进行操作,可以直接使用原数据。因此,无需返回数据,其正确代码如下

2.png

在siwft中,除了class是默认引用传递外,其他数据类型如float,struct等等都属于值传递。如果我们在对其进行处理的时候希望能够在函数中直接对其原值进行修改直接修改,那么最好的方法就是直接使用inout来修饰传入参数,值得注意的是inout 无法修饰带有默认值的参数且经过inout修饰之后,无法再被let和var修饰

相关文章

  • swift之inout关键字

    在swift中,我们常常对数据进行一些处理。因为swift的计算属性,所以如果不是大量重复性处理,基本可以在set...

  • Swift之inout关键字

    在Swift中,常用的字符串、数组和字典,由OC中的NSString、NSArray和NSDictionary转变...

  • Swift汇编分析inout关键字

    因为inout关键字比较简单,因此该文章篇幅相对比较短小。我们直到在swift中inout通常用来在函数内修改外部...

  • swift 关键字inout

    关键字inout:当我们需要通过一个函数来改变函数外面变量的值(以引用方式传递)。通俗的讲:就是使用inout关键...

  • Swift inout关键字

    1、inout定义 将值类型的对象用引用的方式传递。或者说地址传递。类似于ObjectC中的二级指针的意思 2、O...

  • Swift inout关键字

    作者想要达到的实现:在Swift组件化搭建中,让属性传给闭包作为参数供外部Model构建函数使用,使用时在外部修改...

  • 2017-12-26

    swift泛型的使用 ''' func exchange( a: inout T, b : inout T){//...

  • swift之inout

    swift中需要对参数只进行修改,需要用到inout 关键字,调用函数时加& 喜欢可以加Q群号:874826112...

  • Swift中一些常见的关键字二(if let,guard let

    在上一篇文章Swift中一些常见的关键字一(inout,defer,throw等)简单的介绍了几个关键字。本文续写...

  • inout 参数

    在函数的参数中,可以传inout类型参数,如下: 其中inout关键字,当引用相应有inout参数的函数时,参数前...

网友评论

      本文标题:swift之inout关键字

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