两种参数传递方式

值类型

传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据

引用类型

把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据

在 Swift 众多数据类型中,只有 class 是引用类型,
其余的如 Int、Float、Bool、Character、Array、Set、enum、struct全都是类型.

让值类型以引用方式传递

有时候我们需要通过一个函数改变函数外面变量的值(将一个值类型参数以引用方式传递),
这时,Swift 提供的 inout关键字就可以实现。
举例:

/// 以下代码已更新到 Swift 4.0
var value = 50
print(value) // 此时value值为50 func increment(_ value: inout Int, _ length: Int = 10) {
value += length
} increment(&value)
print(value) // 此时 value 值为60,成功改变了函数外部变量 value 的值

即:声明函数时,在参数类型前面用 inout 修饰,函数内部实现改变外部参数
传入参数时(调用函数时),在变量名字前面用 &符号修饰表示,表明这个变量在参数内部是可以被改变的(可将改变传递到原始数据)

注意

  1. inout 修饰的参数是不能有默认值的(例子中 length = 10被赋予默认值),有范围的参数集合也不能被修饰;
  2. 一个参数一旦被 inout 修饰,就不能再被 var 和 let 修饰了。

作者:JinyaX
链接:https://www.jianshu.com/p/5dbb298e9add
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最新文章

  1. Express 4 handlebars 不使用layout写法
  2. 类EF框架Chloe.ORM升级:只为更完美
  3. minHash最小哈希原理
  4. Ubantu Linux 环境下编译c++程序
  5. chaper3_exerise_UVa455_周期串
  6. FooTable高级的响应式表格jQuery插件
  7. java利用commons-email发送邮件并进行封装
  8. sobel流水线操作Verilog程序
  9. Spring Boot 2.0(三):Spring Boot 开源软件都有哪些?
  10. [Swift]LeetCode464. 我能赢吗 | Can I Win
  11. 阿里云 部署dashboard
  12. 自动化测试的Selenium的python版安装与使用
  13. 什么是BOM?,什么是DOM? BOM跟DOM之间的关系
  14. eventEmitter
  15. Oracle EBS GL 会计科目报错 GL_ACCESS_SET_LEDGERS
  16. 转:总结const、readonly、static三者的区别
  17. [转]ViewPager学习笔记(一)——懒加载
  18. idea 新建 maven项目遇到的一些问题
  19. GYM - 101490 J Programming Tutors (匈牙利+二分)
  20. 主成分分析(PCA)及其在R里的实现

热门文章

  1. jquery 中cache为true与false 的区别
  2. Ubuntu如何定时清理内存
  3. BZOJ:2819 NIM(树链剖分||DFS序 &&NIM博弈)
  4. bzoj3160
  5. Git dev分支合并到master分支完美实战
  6. C# 混淆 反编译
  7. bzoj 1502 月下柠檬树【Simpson积分】
  8. java web课程设计截图和服务器地址
  9. JAVA值传递和引用传递 以及 实参是否改变
  10. 进击的Python【第十四章】:Web前端基础之Javascript