【发布时间】:2016-07-21 14:33:02
【问题描述】:
我正在尝试获取对Array 的引用并对其进行修改。因为 Swift 中的 Arrays 是值类型,而不是引用类型,所以如果我先将数组分配给变量,我会得到数组的副本而不是实际的数组:
var odds = ["1", "3", "5"]
var evens = ["2", "4", "6"]
var source = odds
var destination = evens
var one = odds.first!
source.removeFirst() // only removes the first element of the `source` array, not the `odds` array
destination.append(one)
当我们查看 odds 和 evens 数组时,它们没有改变,因为我们更改了 source 和 destination 数组。
我知道我可以在函数上使用inout 参数属性通过引用而不是值来传递它们:
func move(inout source: [String], inout destination: [String], value:String) {
source.removeAtIndex(source.indexOf(value)!)
destination.append(value)
}
move(&odds, destination: &evens, value:one)
有没有办法通过引用而不是按值将这些数组分配给变量?
【问题讨论】:
-
stackoverflow.com/questions/24250938/… 在此处查看此答案。你的问题几乎是重复的。基本上,您需要一个函数来使用
inout参数将数组传递给它。请注意回答者所说的,它不是通过引用传递数组,而是作为外部变量的数组的别名。非常酷的解决方法,因为您不能在 swift 中通过引用传递结构,而数组是结构。 -
在 Swift 中我们有
inout,像: func doSomething(_ value: inout Int32) { value += 123; }一样使用它(但它不支持默认值,所以只需覆盖它,另一个func取少 1 个参数 ;-) ).
标签: swift