问题标签 [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 回答
37 浏览

swift - Swift inout 传递的数组似乎不会影响原始数组

我有一个简单的案例,我不能正确使用 inout。

输出是:

传递的数组的内容在第一次打印时发生了变化,但在第二次打印时没有发生变化。我确实将它作为 var 并在调用中使用了 & 。

0 投票
2 回答
244 浏览

ios - Swift - 如何为 Int 重载 += 以在 nextPage(page: pageIndex += 1) 等函数调用中将运算符作为参数传递?

我想知道如何做以下事情:-

0 投票
1 回答
65 浏览

swift - Inout 和 NSMutableDictionary

如果我在 XCode 12 Playground (Swift 5.3) 中运行以下代码,我会从两个列表中得到相同的结果:

另一个:

根据此处的文档,第二个清单应该给我一个错误: https ://docs.swift.org/swift-book/LanguageGuide/Functions.html

但无论如何它都有效。

这是因为这些进出规则的执行仅限于 Swift 类型,而 Cocoa 类型是例外的吗?

0 投票
1 回答
62 浏览

swift - 尝试将某人用 Swift 3 编写的套接字编程代码更新为 Swift 5.2(Inout 表达式创建一个临时指针......)

以下代码最初用 Swift 3 编写,在 Swift 4.2 中运行时没有警告,在 Swift 5 中给出警告“Inout 表达式创建一个临时指针,但参数 #1 应该是一个比对 '+' 的调用更长的指针”,现在不是完全在 Xcode 12 中编译,错误提示“无法推断通用参数'元素'”。

我试图通过在调用 recv() 函数之前将读取转换为 UInt8 并附加到缓冲区来解决这个问题,但应用程序在其他地方崩溃可能是因为我通过错误地存储读取的字节来破坏套接字读取。

任何建议如何更正上述代码以正确读取和存储缓冲区?

0 投票
3 回答
162 浏览

javascript - 如何只接受带有土耳其字符的文本区域的字符?

这是我的 textareainput 代码,它只接受字符而不是数字。

问题是我不能接受这样的土耳其语字符。我尝试在下面添加代码,但它不起作用。

有什么建议么?

0 投票
1 回答
81 浏览

swift - 允许 inout 参数的默认值

标题可能有点混乱,所以让我打破这个给你。

在 Swift 中,我们可以使用具有默认参数值的函数,例如:

我们也可以有 In-Out 参数,例如

但是,有办法两者兼得吗?一个 inout 参数,如果它没有被传递,我们可以创建?这对于递归函数特别有用,我正在尝试解决这个问题。

0 投票
1 回答
81 浏览

swift - 传入协议类型时出现错误“Inout 参数可以设置为类型不是...的值”

我从 C++ 到 Swift。我在协议和结构方面遇到这种情况(我正在使用随机数):(
1)一个协议RandomPr,它指定了一些方法,例如randFloat()返回 0 到 1 之间的浮点数。
(2)一个使用“实”随机数生成器。 (3) 一个实现的结构,但具有其他方法,例如加载一个浮点数组,然后在我调用实例时反刍这些浮点数。(用于测试目的。)RandomSRandomPr
FakeRandomSRandomPrloadFloat()randFloat()FakeRandomS

现在我有一个函数DoSomething(rng: inout RandomPr),我想将它与RandomS和一起使用FakeRandomS。该参数必须输入输出,因为我需要更新 RNG(无论是真的还是假的)。DoSomething使用RandomS. _

但如果我这样做

我收到一个错误“Inout 参数可以设置为类型不是 'FakeRandomS' 的值。建议的修复方法是定义fakeRng

但是现在尝试调用失败,因为loadFloat没有方法,并且编译器没有看到确实有方法。fakeRngRandomPrloadFloatfakeRng

我尝试制作另一个FakeRandomPr包含额外方法的协议FakeRandomS,并定义

但是,令人沮丧的是,我现在再次收到“Inout 参数可以设置为类型不是...的值”错误。

我可以在 C++ 中毫无问题地做同样的事情(一个纯抽象基类和两个子类,通过引用传入),而且我想要传入的其中一个有额外的方法并不重要。我想把它翻译成协议和结构。什么是 Swift 解决方案?

0 投票
3 回答
272 浏览

swift - 声明一个指向属性的指针并将其作为 inout 参数传递给 Swift 中的 func?

我需要选择一些属性之一并通过引用传递它以将其设置在 func 中。近似代码:

问题是obj不能用作inout参数,但即使我将其声明为varthenobj已更改但不是somePropertyor someProperty2

我读到我需要以某种方式声明objUnsafeMutablePointer并且有类似的问题。但我不知道如何将它们应用于上面的代码以仅修复这 3 行(不更改其余代码):

如何解决这个问题?

PS 换句话说,我需要类似let obj: inout [SomeClass]的东西,但 Swift 不允许这样做

0 投票
2 回答
41 浏览

ios - Swift - 将 inout 参数传递给 scheduleTimer

有没有办法通过 scheduleTimer 方法传递 inout 参数?我想要一个特定的值(在计时器用完之前禁用按钮)。

Var A 只是为了表明我也尝试了另一种方法,但没有奏效

0 投票
0 回答
42 浏览

c++17 - 对输入/输出变量使用“std::shared_ptr”是否合理?

我需要一些关于使用std::shared_ptr输入/输出参数的建议。有类似的东西

被认为是不好的做法(与通常的做法相反void expensive_process(Big& foo))?。foo当是局部变量或临时变量时,此签名统一工作(如果在任何地方都采用) ,例如expensive_process(another_process(foo))or expensive_process(foo->clone())

基本原理

我目前在就地处理数据时使用以下签名:

将签名更改为shared_ptr<Big> process(shared_ptr<Big> foo)有两个主要好处:

  1. 它允许链接,即foo = f1(f2(foo))如果两者具有相同的签名则f1有效f2
  2. 其次,它允许统一使用局部变量和临时变量,即foo = f1(foo)两者another_foo = f1(foo->clone())都有效。

使用原始签名,这两者都不可能。