首页 > 其他分享 > Swift中让值类型以引用方式传递

Swift中让值类型以引用方式传递

时间:2023-04-05 13:55:42浏览次数:37  
标签:value 传递 类型 参数 引用 修饰 Swift inout

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 修饰了。

标签:value,传递,类型,参数,引用,修饰,Swift,inout
From: https://www.cnblogs.com/r1cardo/p/17289307.html

相关文章

  • Qt音视频开发33-不同库版本不同位数的库和头文件的引用
    一、前言做开发过程中难免遇到需要引入第三方库的时候,而且需要在不同库版本、不同系统、不同位数下都需要。第三方的库版本众多,一般在大版本中的小版本都是兼容的,但是大版本不兼容,比如ffmpeg目前就有1-6六个大版本,除去1几乎没人用那还剩5个大版本,目前主要还是4居多。vlc主要是vlc......
  • 指针和引用的区别
    指针和引用在C++中都用于间接访问变量,但它们有一些区别:指针是一个变量,它保存了另一个变量的内存地址,引用是另一个变量的别名,与原变量共享内存地址。指针可以被重新赋值,指向不同的变量,引用在初始化后不能更改,始终指向同一个变量。指针可以为nullptr,表示不指向任何变量;引用......
  • 关于传递引用会导致的问题
    复习effectivec++的时候看到:于是来验证一下,果然会出现对应问题:#include<iostream>#include<vector>#include<math.h>#include<algorithm>#include<unordered_set>#include<set>#include<unordered_map>#include<queue>usingn......
  • 字节码引用检测原理与实战
    一、字节码与引用检测1.1Java字节码本章中的字节码重点研究Java字节码,Java字节码(Javabytecode)是Java虚拟机执行的一种指令格式。可以通过javap-c-vxxx.class(Class文件路径)命令来查看一个Class对应的字节码文件,如下图所示:1.2字节码检测字节码检测本质就是对.java或.kt文件......
  • swift tabview 带参数请求网络。多条目展示。json解析,逃逸闭包
    效果:用到的第三方#Uncommentthenextlinetodefineaglobalplatformforyourprojectplatform:ios,'9.0'target'News'do#Commentthenextlineifyoudon'twanttousedynamicframeworksuse_frameworks!#PodsforNewsp......
  • Django外键引用User模型时显示username的解决方法
    问题需求:在DjangoAdmin后台模型管理中,引用User外键的字段,显示的是username(用户名)。下拉菜单要显示姓名(last_name和first_name,外加username保持唯一性、可辨别性)。使用代理模型(proxymodel)fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportUser#创建代......
  • 子组件传递数据给父组件的三种方法
    1.props<template><!--App.vue--><divid="app"><!--向子组件中传入函数--><Student:receive="receive"></Student></div></template><script>importStudentfrom'./co......
  • Swift中文教程(十七) 可选链
    可选链(OptionalChaining)是一种可以请求和调用属性、方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空(nil)。如果自判断的目标有值,那么调用就会成功;相反,如果选择的目标为空(nil),则这种调用将返回空(nil)。多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为......
  • 线程间数据传递之ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal
    前言在JAVA中线程之间传输数据的方式有多种,而本文旨在探讨ThreadLocal及其衍生类的使用场景。使用场景业务系统的参数传递:在我们的业务系统中可能会用到许多公共参数,可能是用户的token信息,在我们链路中可能某一个方法需要用到它,那么我们又不想一层层的传递它。分布式系统要打......
  • C++ 引用
    (一)多重含义C++中的*和&有多重含义,在不同的使用条件下有不同的意思:1.*int*p=&a;/1.指针a=a*b;/2.乘法*p=100;/3.指向2.&intc=a&b;/1.位运算转换为二进制int*p=&a;/2.取地址inta=100;int&ar=a;/3.引用(二)引用的......