我有2个结构,第一个是:
struct LineData {
init (name: String,
colorValue: String,
values: [Int]){
self.name = name
self.colorValue = colorValue
self.values = values
}
private var cachedMaxValue: Int? = nil
let name: String
let colorValue: String
let values: [Int]
// describe max value for Y axis for specific Line
mutating func maxValue() -> Int{
if let cached = cachedMaxValue {
return cached
}
self.cachedMaxValue = values.max()
return cachedMaxValue ?? 0
}
}
第二个有LineData
结构阵列:
struct CharData {
init(xAxis: XAxis,
lines: [LineData]){
self.xAxis = xAxis
self.lines = lines
}
private var cachedMaxValue: Int? = nil
var xAxis: XAxis
var lines: [LineData]
// describe max value for Y axis among lines
func maxValue() -> Int{
var maxValues: [Int] = []
lines.forEach{it in
maxValues.append(it.maxValue())
}
return 0
}
}
上面的代码不能编译,因为,对于struct maxValues
,方法CharData
上的错误。它说Cannot use mutating member on immutable value: 'it' is a 'let' constant
我想要的是,遍历一系列的行,其中最大值找到更大的价值。
由于lines是一个普通的数组,简单来说:
for i in 0..<lines.count {
maxValues.append(lines[i].maxValue())
}
也许不太像Swifty,但没有任何东西被复制。优化器应该给你几乎与forEach相同的性能。
它是forEach中的it
参数/对象,它是不可变的。就像错误说:“这是一个让”。你可能会做这样的事情:
lines.forEach { it in
var mutableIt = it
maxValues.append(mutableIt.maxValue())
}
应该注意,这将创建“it”结构实例的可变副本。