[Swift] Cannot assign to property: 'self' is immutable
Cannot assign to property: 'self' is immutable ๋ฌธ์ ์์ธ๊ณผ ํด๊ฒฐ
์ ๋ฌธ์ ๋ ๊ตฌ์กฐ์ฒด(Struct)์์ property๋ฅผ ํจ์๋ฅผ ํตํด์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋, ๋ฐ๊ฒฌํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์กฐ์ฒด๋ ์ค๋ ์ท(snap shot)์ ์ฐ์ด๋ด๋ ๊ฒ์ด๋ค.
struct Example {
var p = 0
func changeP() {
p += 1 //p๋ฅผ 1์ฆ๊ฐ
}
}
์ ์ฝ๋์์ p๋ ๊ฐ๋ณ ๋ณ์๋ก ์ ์ํ๋ค. ํ์ง๋ง ํด๋น ๊ตฌ์กฐ์ฒด๋ ๋ณํ์ง ์๋ ์ค๋ ์ท์ด ๋์ด์ผํ๊ธฐ์ ๊ตฌ์กฐ์ฒด ์ ์ฅ์์ ๋ถ๋ณ์ด์ฌ์ผํ property p๋ฅผ ๊ตฌ์กฐ์ฒด ๋ด๋ถ ํจ์์์ ๋ณ๊ฒฝํ ์ ์๋ค.
var ex1 = Example()
ex1.p = 1 //p๊ฐ์ ๋ณ๊ฒฝ
์ ์ฒ๋ผ Example์ ์์๋ฐ์ ์์ฑํ ex1๊ฐ์ฒด๋ p๊ฐ์ ์ง์ ์์ ์ ๊ฐ๋ฅํ์ง๋ง, ๋์์ธ ํจํด์ ์งํค๊ธฐ ์ํด์ ๊ตฌ์กฐ์ฒด ๋ด๋ถํจ์์์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ ์ํฉ์ด ์๊ธด๋ค.
ํด๊ฒฐ์ฑ (mutating ํค์๋ ์ฌ์ฉ)
struct Example {
var p = 0
mutating func changeP() {
p += 1 //p๋ฅผ 1์ฆ๊ฐ
}
}
๋ด๋ถ property๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ func ์์ "mutating" ํค์๋๋ฅผ ์์ฑํ๋ฉด ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.