BaseballGame을 구조체(struct)로 만들고, 내부에 start() 함수를 정의했습니다. 그런데 게임이 끝난 후 기록을 저장하는 recordManager.add(trialCount:) 코드를 작성하던 중 컴파일 에러가 발생했습니다.
다음과 같은 코드에서 문제가 발생했습니다:
struct BaseballGame {
var recordManager = RecordManager()
func start() {
// ❌ 컴파일 에러 발생!
recordManager.add(trialCount: trialCount)
}
}
에러 메시지는 다음과 같았습니다:
Cannot use mutating member on immutable value: ‘self’ is immutable
Swift는 구조체 내부에서 self의 속성을 변경하려 할 때, 해당 함수에 mutating 키워드가 명시되어 있어야 합니다. 위 에러는 recordManager.add(...)가 self 내부의 상태를 변경하기 때문에 발생한 것입니다.
즉, recordManager가 구조체(RecordManager)이며, add(trialCount:)는 내부 배열 records를 변경하는 mutating 함수이기 때문에, 이를 호출하려면 start() 역시 mutating이어야 합니다.
다음과 같이 mutating 키워드를 함수 선언 앞에 추가해줬습니다:
struct BaseballGame {
var recordManager = RecordManager()
mutating func start() {
// ✅ 정상 작동
recordManager.add(trialCount: trialCount)
}
}