Modifier la valeur définie dans le bloc willSet de la variable
Je suis en train de trier le tableau qui est mis en avant mais l'argument de willSet
est immuable et sort
mutation de la valeur. Comment puis-je surmonter cette limite?
var files:[File]! = [File]() {
willSet(newFiles) {
newFiles.sort { (a:File, b:File) -> Bool in
return a.created_at > b.created_at
}
}
}
De mettre cette question de mon propre cadre de ce projet, j'ai fait ce gist:
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]
Je reçois le message d'erreur indiquant que newPeople
n'est pas mutable et sort
est d'essayer de muter.
source d'informationauteur Mohsen
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible de muter de la valeur à l'intérieur
willSet
. Si vous implémentez unwillSet
observateur, il est passé à la nouvelle valeur de la propriété comme un paramètre constant.Qu'en le modifiant pour utiliser
didSet
?willSet
est appelé juste avant la valeur est stockée.didSet
est appelée immédiatement après la nouvelle valeur est stockée.Vous pouvez lire plus au sujet de la propriété des observateurs ici
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html
Vous pouvez également écrire une coutume getter et setter comme ci-dessous. Mais
didSet
semble plus pratique.Il n'est pas possible de changer de types de valeur (y compris les tableaux) avant qu'ils sont définis à l'intérieur de
willSet
. Vous aurez besoin d'utiliser à la place d'une propriété calculée et la sauvegarde de stockage comme suit: