-
Mutating Method - MethodsiOS/๐ Swift 2021. 1. 18. 23:28
์ด ํค์๋๊ฐ ํ์ํ ์ด์
struct์ enum ์ ๊ฐ ํ์ ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํ์ ์ ์์ฑ์ ์ธ์คํด์ค ๋ฉ์๋ ๋ด๋ถ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์์ฑ์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์, implicit property ์ธ `self` ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์๋ฌ๋ฉ์์ง ๋ด์ฉ์ด ์ make `x` mutable ์ด ์๋ make `self` mutable ์ธ์ง ์๊ฐํด๋ณด๋ฉด,
๋ฉ์๋ ๋ฐ๋์์ x ๋ y๋ implicitly ํ๊ฒ ํํ๋ ๊ฒ์ด๊ณ , ์ฌ์ค์ self.x , self.y์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ณ๊ฒฝํ ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ
func ์์ `mutating` ํค์๋๋ฅผ ๋ถ์ฌ์ค๋๋ค.
๋ถ์ฌ์ฃผ๋ฉด ์ธ์คํด์ค ์์ฑ์ ์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ฉ์๋๊ฐ ์คํ ์ข ๋ฃ๋๋ฉด ๋ณ๊ฒฝ๋ ๊ฐ์ ์ธ์คํด์ค ์์ฑ์ ๋ฎ์ด ์์ฐ๋ ๋ฐฉ์์ ๋๋ค.
๋ํ self๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ ์๋ก์ด ๊ฒ์ผ๋ก ๋ฐ๊ฟ ์ ๋ ์๊ฒ ๋ฉ๋๋ค.
๊ด๋ จ ์ฝ๋
struct Point { var x = 0.0, y = 0.0 mutating func realmoveBy(x deltaX: Double, y deltaY: Double) { x += deltaX y += deltaY } } var somePoint = Point(x: 1.0, y: 1.0) //mutating method somePoint.moveBy(x: 2.0, y: 3.0) // "The point is now at (3.0, 4.0)"
์ฐธ๊ณ ์ฌํญ
`let`์ struct ๊ฐ ์ ์ฅ๋๋ฉด, ๊ทธ ์ธ์คํด์ค์ ์์ฑ์ด ์ ๋ถ `let` ์ผ๋ก ์ทจ๊ธ๋๋ ์ ๊ธฐ์ตํ์๋์?
๊ด๋ จ ๊ธ: Value Type vs Reference Type
๋ฐ๋ผ์ let์ ์ ์ฅ๋ struct์ mutating method๋ฅผ ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
๋!
'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋กํ ์ฝ ์์ฑ์ ์๊ตฌ์ฌํญ (Initializer Requirements) (0) 2021.01.19 [Swift] @main ๊ณผ ์ปค์คํ ์ํธ๋ฆฌ ํฌ์ธํธ (2) 2021.01.19 [Swift] ํ๋กํ ์ฝ ๋ฉ์๋ ์๊ตฌ์ฌํญ (Method Requirements) (0) 2021.01.18 [Swift] ํ๋กํ ์ฝ ์์ฑ ์๊ตฌ์ฌํญ (Property Requirements) (0) 2021.01.15 [Swift] ํ๋กํ ์ฝ ๊ฐ์ (Protocol Overview) (0) 2021.01.15