Swift 구조체의 'self' is immutable

Swift 로 코딩을 하다 보면, Mutability에 대해 많은 고민을 하기도 하고 난감할 때가 있죠.

원래 계획은 keyframe이 보통 20개에 훨씬 못 미치니까 일단 20개의 키프레임을 만들어 놓고,
그 값을 서브스크립트로 바꿔가며 작업을 하려고 했는데,

Cannot assign through subscript: 'self' is immutable

라는 에러 메세지를 받았죠.

이유를 찾아보니, struct은 value 타입이라서, 그 인스턴스 프라퍼티를 수정하는 것이 실제로는 그 인스턴스 자체를 수정하는 것이라는군요.

이 경우, 함수 앞에. mutating을 붙여야 한답니다.

저 setPosition 함수 앞에 mutating을 붙이는 걸로 해결은 났지만,
mutating 이라는 키워드를 붙이는 게 좀 께름칙해서, 수정을 하는 게 아니라 변화한 배열을 새로 만들어서 리턴해야 하나?
하는 고민을 하는 중입니다.

Chris Eidof의 글을 하나 주운 건 행운.
https://chris.eidhof.nl/post/structs-and-mutation-in-swift/

나중에 어떻게 변경할지 모르지만 일단은 아래와 같이 수정.

keyframea를 받아온 뒤, 특정 아이템을 바꿔서 리턴하는 걸로.

얻은 건… mutating을 뗄 수 있었다?!

func setPosition(_ newPosition:CGPoint, frame:Int) -> [CGPoint] {
        var newFrames = keyframes
        newFrames[frame] = newPosition
        
        return newFrames
    }