Swift中让值类型以引用方式传递
Swift中让值类型以引用方式传递
在 Swift 众多数据类型中,只有 class 是引用类型,
其余的如 Int、Float、Bool、Character、Array、Set、enum、struct全都是值类型.
有时候我们需要通过一个函数改变函数外面变量的值(将一个值类型参数以引用方式传递),
这时,Swift 提供的 inout 关键字就可以实现。
举例:
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 修饰,函数内部实现改变外部参数
传入参数时(调用函数时),在变量名字前面用 & 符号修饰表示,表明这个变量在参数内部是可以被改变的(可将改变传递到原始数据)
注意
- inout 修饰的参数是不能有默认值的(例子中 length = 10被赋予默认值)
- 一个参数一旦被 inout 修饰,就不能再被 var 和 let 修饰了。
Swift中让值类型以引用方式传递的更多相关文章
- Swift 关键字 inout - 让值类型以引用方式传递
两种参数传递方式 值类型 传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据. 引用类型 把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据. 在 Swift 众多数据类型中, ...
- Swift——(六)Swift中的值类型
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/twlkyao/article/details/34855597 在Swift中,结构体和枚举 ...
- Swift 中的值类型与引用类型
顶级修饰 次级修饰 赋值类型 存储类型 值类型 值类型 深拷贝 栈 值类型 引用类型 浅拷贝 堆 引用类型 值类型 浅拷贝 堆 引用类型 引用类型 浅拷贝 堆 复合引用类型会改变内部值类型的存储行 ...
- Swift中的Void类型与空元祖表达式
可能有不少Swift开发者会忽略这么一个细节:在Swift中,Void类型其实是一个别名类型,而其真正的类型为(),即一个空元祖(empty tuple)! 这种语言特性给Swift带来了一些比较方便 ...
- C#中的值类型和引用类型,深拷贝,浅拷贝
from https://www.jianshu.com/p/2d27b06e253f 一.C#中的值类型和引用类型 概念 值类型直接存储其值. 引用类型存储对值的引用. 说起来有些拗口,其本质是Va ...
- Swift中的指针类型
Swift编程语言为了能与Objective-C与C语言兼容,而引入了指针类型.尽管官方不建议频繁使用指针类型,但很多时候,使用指针能完成更多.更灵活的任务.比如,我们要实现一个交换两个整数值的函数的 ...
- delphi的一些语法知识 以及参数传递问题,按引用方式传递参数,按值方式传递参数
//delphi中exit,abort,break,continue 的区别 exit: 退出函数体abort: 遇到异常,安静处理,就是不显示不提示break: 退出当前循环体,包括for ,whi ...
- .NET中的值类型与引用类型
.NET中的值类型与引用类型 这是一个常见面试题,值类型(Value Type)和引用类型(Reference Type)有什么区别?他们性能方面有什么区别? TL;DR(先看结论) 值类型 引用类型 ...
- Swift中的Optional类型 (可选类型)与强制解包 ? !
我们在swift的开发中会经常遇见?和! ,理解这两个符号深层次的内容对我们的开发是相当有利的: 目前网上对swift3.0的教程还相当的少,如果去搜索会发现早期的说法,在定义变量的时候,swift是 ...
- Windows Phone 开发起步之旅之二 C#中的值类型和引用类型
今天和大家分享下本人也说不清楚的一个C#基础知识,我说不清楚,所以我才想把它总结一下,以帮助我自己理解这个知识上的盲点,顺便也和同我一样不是很清楚的人一起学习下. 一说起来C#中的数据类型有哪些,大 ...
随机推荐
- 暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx
\[\text{暑假集训CSP提高模拟}\int^{6}_{0}\frac{x^{2}}{6}dx \] 关于这个东西怎么求的良心教程 含义:求出 \(f(x)=\frac{x^{2}}{6}\) 在 ...
- 4.2 等差数列及其前n项和
\(\mathbf{{\large {\color{Red} {欢迎到学科网下载资料学习}} } }\)[[高分突破系列]高二数学下学期同步知识点剖析精品讲义! \(\mathbf{{\large { ...
- 墨天轮最受DBA欢迎的数据库技术文档-故障处理案例篇
在之前发布的<墨天轮最受欢迎的技术文档-容灾备份篇>中,大家说想看故障处理案例篇的内容,这不!编辑部快马加鞭给大家整理来了,希望能够帮助到大家. 数据库故障可能出现在内存.网络.CPU.硬 ...
- C# 的空类型
// 空类型 null int iii; // 默认 0 bool bbb; // 默认 false bool? b; // 空值 null int? i; // 空值 null string str ...
- DDD实体和对象
实体 entity 标识符用来唯一定位一个对象,在数据库中我们一般用表的主键来实现标识符,主键和标识符的思考角度不同,就是 id 字段 : 实体:拥有唯一的标识符,标识符的值不会改变,而其他对象的状态 ...
- 全网最适合入门的面向对象编程教程:57 Python字符串与序列化-序列化与反序列化
全网最适合入门的面向对象编程教程:57 Python 字符串与序列化-序列化与反序列化 摘要: Python 序列化与反序列化是将 Python 对象转换为字节流(序列化)以便存储或传输,和将字节流转 ...
- fatal: couldn't find remote ref XXX解决
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- KubeSphere 部署 Zookeeper 实战教程
前言 知识点 定级:入门级 如何利用 AI 助手辅助运维工作 单节点 Zookeeper 安装部署 集群模式 Zookeeper 安装部署 开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生 ...
- 在 OpenFunction 中运行 Serverless 应用
除了构建和运行 Serverless 函数之外,OpenFuntion 还支持构建和运行 Serverless 应用.因此,OpenFunction 用户可以不用局限在各语言的 functions-f ...
- NES 系统架构
主机 NES(FC.红白机.小霸王)的系统架构可用下图表示: 系统中最核心的组件是 CPU,其它组件都可以算作 CPU 的外设.CPU 的外设包括:PPU(图像处理器).APU(音频处理器).WRAM ...