问题标签 [inout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
230 浏览

swift - Swift:带有 inout-Closure 的函数

我有以下结构:

这个结构应该在这样的函数中编辑:

但是,我确实很难打电话editMyStruct(action: (inout MyStruct) -> ())

XCode 抛出错误:

在没有更多上下文的情况下,表达式的类型是模棱两可的

有谁知道,如何解决这个问题?

期待你的回复!

0 投票
4 回答
159 浏览

swift - 迅速将值影响到 inout 通用变量

我想用 T 变量简化这段代码,但无法成功编译。希望你能给我方法。

这是我要重写的“重复”代码:

这是我编写但未编译的代码:

对于那些做作,我得到了那些编译错误: readValue = integerValue -> 'Int' is not convertible to 'T' readValue = stringValue -> 'String' is not convertible to 'T'

有没有办法使用泛型将我的两个函数与一个独特的函数合成?

0 投票
1 回答
124 浏览

ios - 在函数中使用多个 inout 参数时应用程序崩溃

当我使用以下代码时,我的应用程序崩溃。

错误:

但是当我使用单个参数函数时,如下所示。代码正在工作

所以我的主要目标是使用带有多个参数的 inout 函数。我该怎么做或者我的代码有什么问题?

谢谢你。

0 投票
2 回答
1361 浏览

ios - 将引用存储在变量 SWIFT 4 中

我将一个参数从我的 viewController 发送到 customCell。我的自定义单元格有一个 textField。在我的 viewController 中,我有一个字符串变量,用于将值存储在 textField 中,因为我将把这个值发送给休息服务。

我的自定义单元格

我的视图控制器

当我将引用发送到 customCell 时,我在 textFieldDidEndEditing 方法中丢失了引用。

0 投票
2 回答
762 浏览

swift - Swift 中“+=”运算符的内存安全

我一直在快速学习,遇到了一个关于内存安全的问题。+=运算符在左侧接受一个参数,该inout参数应该对整个函数调用具有写访问权限。left = right+left它在其实现中做了类似的事情。它似乎是写入和读取访问的重叠。这怎么不违反内存安全?

编辑:根据The Swift Programming Language,它可以在一个线程中发生:

但是,这里讨论的冲突访问可能发生在单个线程上,不涉及并发或多线程代码。

详细说明:这里有两个来自The Swift Programming Language (Swift 4.1 beta) 的例子。我很困惑+=结构中的这种自定义实现如何Vector2D正常:

当这不是:

进一步编辑:

我认为我的问题确实是 += 作为一个函数,特别是在使用时

或使用自定义实现:

这没有任何错误。但是 func 从左侧获取一个 inout,因此对“step”具有长期写入访问权限,那么如果右侧也传入“step”,我很困惑这不是“step”的即时读取访问”与“步”的长期书写重叠。或者,当您为两个 inout 参数传入同一个实例时,这只是一个问题,而不是一个 inout 和一个常规参数?

0 投票
2 回答
143 浏览

swift - “从隐式转换将元组作为 inout 参数传递时需要一个临时的错误

这是我的代码:

我收到此行的以下错误:

无法将不可变值作为 inout 参数传递:从“(String,Double)”到“(arg1:String,arg2:Double)”的隐式转换需要临时

0 投票
1 回答
412 浏览

swift - 为什么我不能将隐式展开的可选项作为 UnsafeMutablePointer 传递?

似乎 Xcode 9.3 确实解决了我遇到的一个问题,但在 Swift 4.1 中,这段代码的后半部分仍然无法编译:

调用inoutFunc现在很好,但调用pointerFunc仍然给我一个错误:

无法使用类型为“(inout SomeClass!)”的参数列表调用“pointerFunc”

或在原始上下文中:

无法传递“ActualClass”类型的不可变值?作为 inout 参数

类似于我的 Swift 4.0 问题(inoutFunc也没有编译),如果我将声明更改为,var obj: SomeClass?那么第二个函数调用将毫无怨言地编译。

这是另一个与隐式展开选项相关的挥之不去的 Swift 错误,还是UnsafeMutablePointer预计这种情况不会像inout现在的版本那样工作?有没有相对干净的解决方法?


背景:

在实际代码中,pointerFunc调用是一个 Apple 框架函数,它要么初始化实例,要么返回错误状态。

由于我已经guard AppleFrameworkInitializer(&obj) == noErr else { /* … */ },我不想处理从临时可选的重新分配,或者必须不断地解开后面obj!的所有代码。

也就是说,这似乎是隐式解包选项的合法用例,我想知道为什么我仍然不能在这里使用一个。

0 投票
2 回答
33 浏览

ios - 不能在 inout 函数中使用 SKShapeNode

所以,就像我SKSpriteNode的 s 一样,我正在尝试创建一个函数来让我成为一个默认的物理体。

这是我DefaultBody.swift创建的:

在这里我可以轻松调用 Sprite 版本:

在此处输入图像描述

但是,尽管我可以使用 来执行此操作,但SKSpriteNode我的SKShapeNode函数不起作用,因为我收到此错误:

在此处输入图像描述

这不起作用,所以如果我去掉inout函数中的 并将其添加为返回,它现在可以工作(使用上图中注释掉的调用)

有什么理由吗,我该如何使用inout而不是返回SKShapeNode

注意: aPhysicsBody可以设置为SKShapeNode

两者都在这里显示,var也没有let显示,因此应该是可变的:

在此处输入图像描述

0 投票
0 回答
395 浏览

swift - 在 Swift 中从 NSData 读取一个 Int

我正在尝试从 Swift 中的大文件中读取数据——我不希望将整个文件读入 NSData 对象,这似乎是 Swift 想要做所有事情的方式。

我找到了使用 FileHandle 打开文件并将数据块读入 NSData 对象的代码。但我不知道如何将数据转换为正确的格式。我在网上看到的所有内容都表明这应该可以将 NSData 块转换为 Int:

但它不会编译。它说

我不明白为什么它这么说。我在项目的其他部分以同样的方式使用 data.getBytes 没有问题。从 handle.readData 返回的 NSData 对象有什么不同吗?

谢谢!

0 投票
3 回答
1416 浏览

swift - 快速和参考类型的输入输出

我试图了解值和引用类型之间的区别。现在我想使用苹果指南中的功能:

如果我想使用这是函数,我将编写这段代码

我知道我们必须放入这个函数引用类型,但是 Int 是一个值类型,因此我们使用 &。
另一方面,当我尝试在交换函数中将 Int 更改为我的类时,我还必须在类的实例之前编写 &。

如果它已经是参考,为什么我必须这样做?