swift inout 参数是变量还是指针?

2024-01-08

在下面的代码中使用 swift inout 参数我感觉有点迷失:

var shouldContinue: Bool = true

func doSomeWork1(shouldContinue: inout Bool)
{
    while shouldContinue
    {
        // ERROR: the compiler wants: doSomeWork2(shouldContinue: &shouldContinue)
        doSomeWork2(shouldContinue: shouldContinue)
    }
}

func doSomeWork2(shouldContinue: inout Bool)
{
    while shouldContinue
    {

    }
}

为什么编译器想要doSomeWork2(shouldContinue: &shouldContinue)代替the compiler wants: doSomeWork2(shouldContinue: shouldContinue)?不是shouldContinue已经是 doSomeWork1() 范围内的指针???


成为指针只是 inout 参数优化过程的副作用。他们实际上以不同的方式工作复制输入 复制输出行为。因此,在函数内部,该参数被视为常规变量,而不是指针。如果将其传递给另一个接受 inout 参数的函数,则必须将其标记为这样。

输入输出参数传递如下:

当函数被调用时,参数的值被复制。

在函数体内,副本被修改。

当函数返回时,副本的值将分配给原始参数。

这 行为称为拷入拷出或按值结果调用。为了 例如,当计算属性或具有观察者的属性是 作为输入输出参数传递,其 getter 被调用作为 函数调用及其 setter 作为函数返回的一部分被调用。

作为一种优化,当参数是存储在物理上的值时 内存中的地址,内部和外部使用相同的内存位置 在函数体之外。优化的行为称为调用 参考;它满足copy-in的所有要求 复制输出模型,同时消除复制的开销。编写你的代码 使用copy-in copy-out给出的模型,而不依赖于 按引用调用优化,以便它可以正确地使用或 没有优化。

输入输出参数 https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID545

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swift inout 参数是变量还是指针? 的相关文章

  • 为什么我们需要将 delegate 设置为 self?为什么编译器不默认它?

    I think我完全理解授权的概念 我的问题是 当我们这样做时 class someViewController UIViewController UITableViewDelegate 会吗ever可能我们不想设置tableView de
  • Sprite-kit:沿圆形路径移动元素

    我正在尝试让一个元素沿着圆圈的边缘移动 我在屏幕中间创建并放置了一个圆圈 var base SKShapeNode circleOfRadius 200 Size of Circle base position CGPointMake fr
  • 小部件配置在 macOS 上不起作用

    我为我的 iOS 应用程序制作了一个小部件 效果很好 现在我正在将其移植到我的 macOS 应用程序中 但不知何故 小部件配置不起作用 这些项目已显示 但我无法以某种方式选择它们 查看屏幕截图 但请看一下我制作的视频 https youtu
  • 使用 AVAssetExportSession 导出延时会导致黑色视频

    我需要能够合并使用 iOS 上的相机应用程序中的延时拍摄功能拍摄的视频并导出为单个视频 但是 即使我尝试将单个未更改的延时视频导出到照片库 它也会保存为全黑视频 具有正确的持续时间 以下是我编写的示例代码 用于导出单个未更改的视频 其中大部
  • UIAlertController 显示延迟

    我在我的应用程序上遇到了 UIAlertController 问题 现已迁移到 iOS8 其中包含日期选择器 下面是代码 UIAlertController AlertView UIAlertController alertControll
  • 如何使用 swift 将 UIColor 转换为字符串以及将字符串转换为 UIColor?

    我有一个具有 UIColor 属性的对象 class Beer NSObject var color UIColor 我将其保存到数据库中 因此我需要将此属性转换为有效的 JSON 类型 因此我正在考虑将其转换为字符串 如何转换为要存储的字
  • 通过 firebase 登录获取更大的 Facebook 图片

    我正在使用 firebase 通过 facebook 登录用户 这一切都工作正常 我可以获取用户 FB 个人资料图像 尽管它太小了 有人可以告诉我如何获得更大的 我正在使用的代码 override func viewDidLoad let
  • MFMailcomposeviewcontroller 发送按钮被禁用

    有没有人遇到这样的问题MFMailcomposeviewcontroller发送按钮被禁用 变灰 取消按钮工作得很好 这似乎是一个新错误 如果本机邮件应用程序从 iPhone 中删除 从 iOS 10 开始允许 则可能会发生这种情况 在这种
  • 如何将 Swift 字符串传递给 C 函数?

    我在将字符串从 swift 传递到用 c 编写的函数时遇到严重问题 我正在尝试在我的快速代码中执行此操作 var address 192 168 1 2 var port 8888 initSocket address port c 函数如
  • Swift 从 Realm 中删除对象

    我有领域对象保存来自 JSON 响应的列表 但现在如果该对象不再从 JSON 中出现在列表中 我需要删除该对象 我怎么做到这一点 这是我的领域初始化 func listItems dic Array lt String AnyObject
  • 使用随机初始密钥解码字典

    我正在接收并尝试解析包含事件数据的 json 文件 它是一个字典的字典 其组织方式如下 其中每个事件的键都是随机事件 id 19374176 122 event title Cool Fun Thing to Do description
  • 如何以编程方式创建 Unwind segue

    我制作了一个不使用故事板的应用程序 在我的应用程序的这一部分中 我需要创建一个展开转场ThirdViewController to FirstViewController仅以编程方式 我知道如何使用 sotorybard 执行此操作 但找不
  • 带 cookie 的 Alamofire 请求

    我是初学者 我不知道如何使用 Alamofire 发出 GET 请求 但它需要身份验证 我设法用其他网络服务 登录 来做到这一点 因为它需要参数参数 parameters username username password passwor
  • 检查 switch 语句中的可用性

    if a Enum输入添加新的case在新的操作系统版本中 如何检查可用性switch陈述 像一个Enum in StoreKit below public enum Code Int public typealias ErrorType
  • 二元运算符“&=”不能应用于 Swift 中的两个“Bool”操作数

    我正在尝试进行多次检查 将结果累积在Bool 我的代码是 var validParams login characters count gt 4 validParams password characters count gt 6 vali
  • 使用 Swift 创建 SKSpriteNode 子类

    我正在尝试创建作为 SKSpriteNode 子类的类 并且我想向其添加其他属性和函数 但在第一步中我遇到了错误 这是我的代码 import SpriteKit class Ball SKSpriteNode init super init
  • 如何以编程方式设置 UICollectionViewCell 宽度和高度

    我正在尝试实施一个CollectionView 当我使用自动布局时 我的单元格不会改变大小 但会改变它们的对齐方式 现在我宁愿将它们的尺寸更改为例如 var size CGSize width self view frame width 1
  • 免费套餐于今天 11 月 28 日结束,Heroku 网站于今天删除 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我的 Heroku 网站已被删除 因为我没有切换到付费计划 我刚刚切换到 Eco Dyno 我的网站会自动恢复还是需要重建 注意 使用 He
  • 使用 CommonCrypto 的 Swift AES 加密

    我正在开发一个 iOS 应用程序代码7 1 with 斯威夫特2 1我正在尝试进行简单的加密AES 128 位 and PKCS7填充使用通用加密库 该代码有效 但每次我尝试投射NSData反对NSString然后对于 String 我得到
  • NumberFormatter 分组未按预期工作

    在进行货币格式化工作时 我在尝试格式化智利比索时发现了一个问题 按照此代码 let priceFormatter NumberFormatter priceFormatter locale Locale identifier es CL p

随机推荐

  • 跨源子帧中表单控件的自动对焦被阻止

    使用 Chrome 当我尝试更改位于我们服务器上另一个应用程序的 IFrame 中的输入值时 我在 Chrome 中收到错误 在跨源子框架中阻止对表单控件的自动对焦 在生产中 当两个应用程序托管在同一域上时 它正在工作 但在本地主机开发中我
  • 如何发现 Spark 数据框中列格式的异常?

    正如问题所说 我想找到大型数据集中列中值格式的异常 例如 如果我在包含 5 亿行的数据集中有一个日期列 我想确保该列中所有行的日期格式为 MM DD YYYY 我想找到此格式中存在异常的计数和值 我该怎么做呢 我可以使用正则表达式吗 有人可
  • IOS Swift - 自定义相机覆盖

    你好 我想在我的应用程序中打开一个摄像头 如下所示 我想仅在该部分的中间打开相机 以便用户只能在矩形部分中拍摄快照 我正在使用的代码是这样的 import UIKit import AVFoundation class TakeProduc
  • python 中对象的 __init__() 方法做什么? [复制]

    这个问题在这里已经有答案了 在阅读 OpenStack 代码时 我遇到了这个问题 一个名为 Service 的类继承了基类 object 然后在Service的 init 方法 对象的 init 叫做 相关代码如下所示 类定义 class
  • 在 Selenium 2 中截取测试屏幕截图的最佳方式?

    我需要一种方法来截取功能测试的屏幕截图 现在我正在使用带有 C 绑定的 Selenium 2 我非常想在测试结束时截取屏幕截图 以确保显示所需的页面 你们知道有什么特定的工具可以合并到我的 C 代码中来触发屏幕截图吗 我找不到内置的 Sel
  • 检测 navigator.online 上的更改

    如何检测导航器是否将您的状态更改为在线 离线 就像是 var oldState navigator onLine window navigator onlinechange function evnt newState alert your
  • RPM 规范文件可以“包含”其他文件吗?

    RPM 规范中有一种 include 指令吗 我无法通过谷歌搜索找到答案 动机 我有一个 RPM 规范模板 构建过程会使用版本 修订版和其他特定于构建的数据对其进行修改 这是由sed现在 我认为如果规范会更干净 include特定于构建的定
  • 使用 javascript onClick 显示 Bootstrap Modal

    我需要能够使用以下命令打开 Twitter 引导模式窗口onClick 或类似的功能 只需要输入代码即可onClick 我正在尝试制作一个可点击的div打开模式 代码摘录 部门代码 div class span4 proj div 模态di
  • 如何在swift语言中使用CC_MD5方法

    在 Objective C 中 我们可以像这样对字符串进行哈希处理 const char cStr someString UTF8String unsigned char result 16 CC MD5 cStr strlen cStr
  • ASP.NET MVC 应用程序中的单例类或具有静态方法的类[重复]

    这个问题在这里已经有答案了 可能的重复 ASP NET 单例 https stackoverflow com questions 2134511 asp net singleton 我知道单例类和具有静态属性 方法的类之间的一般差异 但我想
  • UITextView字体为零

    我在故事板中创建了一个字体大小为 14 的 UITextView 并将其连接到 ViewController 的DetailDescriptionLabel 属性 这段代码在viewDidLoad中 self detailDescripti
  • 通过 fftw_mpi_r2c_2d 和 fftw_mpi_c2r_2d 输出不正确

    我编写了一个简单的测试程序 以便在 2d 域 使用 Fortran 中使用 MPI 实现 FFTW 该域的宽度为 Ny x Nx 并在第二个 x 索引中进行分区 在正确 我相信 声明和分配变量和计划之后 我调用 fftw mpi r2c 2
  • 最简单的源代码控制——你用什么?

    我正在开发一个独立项目 自己编写所有代码 因此不需要协作 但是 我确实需要以下功能 检查当前版本 并附上评论 为版本分配标签 使用标签检索版本 未托管 意味着我将存储库保存在本地计算机上 免费 开源 有一个漂亮的 GUI 而不是命令行 我认
  • 如果我读取键不存在的映射值,会发生什么情况?

    map
  • 在终结器中调用 GC.SuppressFinalize 是否无害?

    因为finalizer IDisposable以及所谓的 IDisposable模式 主题往往会带来大量故作姿态 武断和好战的观点 not 分别 here https stackoverflow com questions 36344293
  • 如何重置 Android Studio

    我想重置Android Studio 0 2 13到默认状态 这意味着重置所有设置 删除所有项目 所有 gradle 文件 以便它像全新安装一样 我必须遵循哪些步骤才能实现这一目标 我只知道如何在 Windows 上执行此操作 但在任何操作
  • SimpleDateFormat(String template, Locale locale),例如用于 ASCII 日期的 Locale.US

    Issue 直接使用 SimpleDateFormat 无需显式语言环境Id 简单日期格式 SimpleDateFormat format new SimpleDateFormat yyyy MM dd HH mm ss 为什么是 要获取本
  • 如何高效地将大数据加载到pandas中? [复制]

    这个问题在这里已经有答案了 我正在使用一个非常广泛的数据集 1005 行 590 718 列 1 2G 将如此大的数据集加载到 pandas 数据框中会完全由于内存不足而导致代码失败 我知道 Spark 可能是 Pandas 处理大型数据集
  • 在 Matlab 中对一维向量上的范围选择进行向量化

    这可能非常简单 但我无法弄清楚 我想创建一个范围矩阵 我可以使用以下循环来完成此操作 a 0 10 22 35 42 sample initial ranges for i 1 length a b i a i a i 5 end b 0
  • swift inout 参数是变量还是指针?

    在下面的代码中使用 swift inout 参数我感觉有点迷失 var shouldContinue Bool true func doSomeWork1 shouldContinue inout Bool while shouldCont