Simple question:
How can I process each member (struct or scaler) of an array?
The following are two means of doing the same thing:
拨打AJAX电话
我想要做的就是处理数组的每个成员。但我无法弄清楚为什么' num'必须是一个常数。
答案 0 :(得分:2)
num
是每个元素的值,而不是对元素的引用。将值数组映射到新值的数组的正确方法是使用map
:
var array = [1,2,3,4,5]
array = array.map { $0 + 1 }
除了其他好处之外,这只会设置array
一次,所以如果array
有didSet
个观察者(在属性上比较常见,但在任何地方合法),那么它只会叫了一次。
你可以一次修改一个元素,但它更笨拙,更不安全,需要更多代码,并且有更多的副作用(比如多次执行didSet
)。也就是说,它偶尔会有用。如果是这样,您需要使用下标。
var array = [1,2,3,4,5]
for index in array.indices {
array[index] += 1
}
答案 1 :(得分:0)
我确实发现了通过不同模式使用'map':
func setColumnIDfor(matrixRow:inout[MatrixBox]) {
let newMatrixRow = matrixRow.map { (box) -> MatrixBox in
var tempBox = box
tempBox.columnID = "Q"
return tempBox
}
matrixRow = newMatrixRow
}