/ / swift4: „nie można użyć elementu mutującego na niezmiennej wartości:„ self ”jest niezmienny” w funkcji mutacji - szybki

swift4: "nie można użyć elementu mutującego na niezmiennej wartości:" self "jest niezmienne" w funkcji mutowania - szybkie

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 № 1

RangeReplaceableCollection 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.