Ändern Sie den Wert, wird festgelegt in der variable willSet block
Ich versuche zu Sortieren das array, wird vor Einstellung aber das argument von willSet
ist unveränderlich und sort
mutiert der Wert. Wie kann ich das überwinden dieser Grenze?
var files:[File]! = [File]() {
willSet(newFiles) {
newFiles.sort { (a:File, b:File) -> Bool in
return a.created_at > b.created_at
}
}
}
Diese Frage aus meinem eigenen Projekt-Zusammenhang, habe ich diesen Kern:
class Person {
var name:String!
var age:Int!
init(name:String, age:Int) {
self.name = name
self.age = age
}
}
let scott = Person(name: "Scott", age: 28)
let will = Person(name: "Will", age: 27)
let john = Person(name: "John", age: 32)
let noah = Person(name: "Noah", age: 15)
var sample = [scott,will,john,noah]
var people:[Person] = [Person]() {
willSet(newPeople) {
newPeople.sort({ (a:Person, b:Person) -> Bool in
return a.age > b.age
})
}
}
people = sample
people[0]
Bekomme ich die Fehlermeldung besagt, dass newPeople
ist nicht veränderlich und sort
versucht zu mutieren.
InformationsquelleAutor der Frage Mohsen | 2015-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht möglich, zu mutieren, den Wert innerhalb
willSet
. Wenn Sie implementieren einewillSet
Beobachter, es ist vergangen, das neue Eigenschaft-Wert als parameter eine Konstante.Was ist zu modifizieren, um die Verwendung
didSet
?willSet
wird aufgerufen, kurz bevor der Wert gespeichert ist.didSet
wird sofort aufgerufen, nachdem der neue Wert ist gespeichert.Lesen Sie mehr über Eigentum Beobachter hier
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html
Können Sie auch schreiben Sie eine custom getter und setter wie unten. Aber
didSet
bequemer.InformationsquelleAutor der Antwort rakeshbs
Es ist nicht möglich, ändern Sie die Wert-Typen (einschließlich arrays), bevor Sie im inneren des
willSet
. Sie müssen stattdessen verwenden Sie eine berechnete Eigenschaft und sicherungsspeicher etwa so:InformationsquelleAutor der Antwort Jack Lawrence