Ten kod
extension Collection {
mutating func f() {
removeFirst()
}
}
przetworzyć błąd
cannot use mutating member on immutable value: "self" is immutable
Myślę, że słowo kluczowe mutujące powinno umożliwić modyfikację „self”. Dlaczego?
Odpowiedzi:
0 dla odpowiedzi № 1RangeReplaceableCollection
jest protokołem, do którego kolekcji dostosuj, jeśli możesz dodawać lub usuwać elementy:
extension RangeReplaceableCollection {
mutating func f() {
self.removeFirst()
}
}
0 dla odpowiedzi nr 2
Myślę, że słowo kluczowe mutujące powinno umożliwić modyfikację „self”. Dlaczego?
Jeśli możesz po prostu zmienić istniejący protokółlub klasy od niezmiennej do mutowalnej poprzez robienie tego, co próbujesz zrobić, byłoby prawie niemożliwe napisanie frameworków w efektywny i dobrze zaprojektowany sposób, gdyby klasy nie mogły ufać tam własnemu stanowi lub wartości jego właściwości.
Jest to konieczne ograniczenie i wynika również z zasada otwartego zamkniętego jak to widze.