Ich habe eine Struktur, die eine var data:[T]
umwickelt, die auch einige Statistiken über das interne Array liefert. Eine Statistik ist der maximale Wert, der eine teure Operation sein kann, weil es jedes Element suchen muss, um den maximalen Wert zu ermitteln - also möchte ich den Maximalwert zwischenspeichern und nur neu berechnen, wenn ich Folgendes benötige:Kann eine schnelle berechnete Eigenschaft eine Struktur manipulieren?
private mutating func getMax()->T? {
if let m=maxValue {
return m
}
else if data.count>0 {
maxValue=data.maxElement()
return maxValue
}
else {
return nil
}
}
Das scheint als Methode gut zu funktionieren, aber ich kann nicht herausfinden, wie man dasselbe wie eine berechnete Eigenschaft tut.
var max:T? {return getMax()}
führt zu einer Beschwerde, dass der Accessor markiert werden muss, ist „mutiert“, weil getMax() (tatsächlich mutiert ich den getMax Code in das Eigenschaftenaccessor setzen würde, aber es ist einfacher, den Code nicht hier neu zu schreiben).
Xcode schlägt vor, ich den Code neu schreiben thusly:
var max:T? mutating {return getMax()}
die dann Flaggen ein anderes Problem und Xcode schlägt ein Semikolon vor mutiert setzen, die auf einen Vorschlag führt ein weiteres Semikolon nach mutiert und dann noch ein weiteres Semikolon zu setzen, nachdem das Mutieren und es ist klar, dass der Compiler nicht einmal versucht zu helfen, sondern nur einen Semikolon-Fetisch hat.
Gibt es eine Möglichkeit, eine berechnete Eigenschaft zu schreiben, die das Zwischenspeichern von Werten zulässt, oder stehe ich fest, wenn ich dies als Methode schreibe?
Mögliche Duplikat http://stackoverflow.com/questions/25048000/lazy-calculated-variable. –