美文网首页
Swift3 之函数参数的新变化

Swift3 之函数参数的新变化

作者: Jseanj86 | 来源:发表于2016-10-10 12:07 被阅读0次

今天,在看 Then 源码时,发现了一处比较值得研究的地方

public func with(_ block: (inout Self) -> Void) -> Self {
    var copy = self
    block(&copy)
    return copy
}

这部分代码是在针对 Any 类型的协议扩展里实现的。这里 with 的语义是拷贝值类型并修改(代码中针对的是 Any,这里用值类型来说明问题)。可以看看官方的示例:

let newFrame = oldFrame.with { 
    $0.size.width = 200 
    $0.size.height = 100
}
newFrame.width // 200
newFrame.height // 100

注意,这里使用的是 inout 关键字,而且已经把它的位置放在了类型之前,这是 Swift3 的新变化 Adjusting inout Declarations for Type Decoration

在函数调用时,如果传递的参数是引用类型,那么我们在函数中对参数的修改会直接影响到传进来的变量,这就是函数的副作用。

然而,如果传递的参数是值类型的话,我们在函数中对参数是不可以进行修改的,因为传参时函数会创建一个不变量来存储值,我们不可以对这个不变量进行修改。在 Swift2 中有个关键字 var 可以让函数创建一个变量来存储值,这样我们就可以在函数中对这个变量进行修改了。不过在 Swift3 中已经去掉了这个关键字 Removing var from Function Parameters

如果想让值类型具备引用类型的语义,这时 inout 关键字就出场了。这个有点类似 C 语言中传递指针,我们在调用时需要加上 & 标识。这样,我们就可以愉快的对值类型进行修改了。不过,为了避免函数副作用,我们最后不要这样做。

相关文章

  • Swift3之函数(二)

    Swift3之函数(一) 进阶部分 1.函数参数 -- 外部参数名 2.下滑线 -- _ 3.函数参数 -- 设置...

  • Swift3 之函数参数的新变化

    今天,在看 Then 源码时,发现了一处比较值得研究的地方 这部分代码是在针对 Any 类型的协议扩展里实现的。这...

  • swift3默认参数值函数

    一个可变参数的参数接受指定类型的零个或多个值。您可以使用可变参数参数指定的参数可以传递不同数量的输入值,当函数被调...

  • Swift3默认参数值函数

    可以定义一个默认值由该参数的类型后分配值参数在函数的任何参数。如果默认值定义,你可以调用函数时省略该参数。func...

  • Python学习之路(函数参数)

    函数参数 以及默认参数 定义一个可变参数的函数 一般是list 或者 tuple 函数参数之关键字参数 练习 写一...

  • Swift3新变化

    ++与 -- 操作符 自增自减是来源于 C 的操作符,作用是对变量直接进行 +1或 -1的操作: 然而,在我们要选...

  • 07:函数之函数的参数和返回值

    python学习day_6: 函数之函数的参数和返回值: 1、函数的参数: 参数:其实就是一种变量 是一种特殊的变...

  • 函数之参数

    1. 形参与实参 2. 默认参数 默认参数:定义形参时,已经给形参赋值调用参数时,默认参数是可有可无,非必传用途:...

  • 10-Swift 函数

    0、函数概念: 函数相当于 OC 中的方法 函数的格式: func 是定义函数的关键字 如果有多个参数,参数列表之...

  • Swift3之函数(一)

    学习步骤: 函数概述 常量参数,变量参数, I/O 参数1.函数 -- 常量参数 2.函数 -- 变量参数(swi...

网友评论

      本文标题:Swift3 之函数参数的新变化

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