【问题标题】:How to call a function with an `inout` argument on each element of array?如何在数组的每个元素上调用带有“inout”参数的函数?
【发布时间】:2016-12-01 21:26:06
【问题描述】:

我有一个接受inout 参数的函数

 func modify(word: inout Word)

我需要在数组的每个元素上调用它。这就是我的工作

for word in words {
    modify(word: &word)
}

但我得到错误:

不能将不可变值作为 inout 参数传递:'word' 是 'let' 常量

我尝试遍历mapwords.map{ modify(word:&$0) },还是一样的错误:

不能将不可变值作为 inout 参数传递:'0$' 是不可变的

有没有办法在数组的每个元素上调用带有inout 参数的函数?

【问题讨论】:

  • 不要使用 inout。如果必须,那么您将需要遍历数组,使用修改后的单词构建一个新数组或使用索引变量而不是枚举

标签: swift swift3


【解决方案1】:

当使用for word in words 语法时,word 实际上是数组中元素的不可变副本。

要直接修改数组,请迭代索引:

for i in words.indices {
    modify(word: &words[i])
}

相当于(至少对于数组而言)

for i in 0..<words.count {
    modify(word: &words[i])
}

【讨论】:

  • 看到你的答案后删除我的答案。我从来不知道这一点,并发布了您答案的“Swifty”版本!不错!
  • 请注意words 仍然需要用var 声明,而不是let
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2019-03-27
  • 1970-01-01
  • 2020-03-18
相关资源
最近更新 更多