실제 과제 의도는 모르겠지만 나는 게임을 한 번 시행하면 각 테마의 색깔이 최초에 랜덤으로 지정되고 그 색이 유지되기를 바랬는데 New Game
버튼을 누를 때마다 매번 모든 테마의 색깔이 랜덤으로 바뀌었다...찾아보니 computed property
는 static
이어도 구조체에 변화가 생길 때마다 매번 다시 연산 되기 때문이었음!
그래서 함수를 사용하되 stored property
를 선언할 수 있는 방법이 없을까 하고 찾아보다가 let variable = { // some closure }()
와 같은 형식으로 선언하면 클로저의 리턴값
이 저장됨을 배울 수 있었다
static var themes: [Theme] = {
var themes = [Theme]()
let defaultPairsOfCards = 8
themes.append(createTheme("Vehicles", vehicleEmojis, defaultPairsOfCards))
themes.append(createTheme("Animals", animalEmojis, defaultPairsOfCards))
themes.append(createTheme("Food", foodEmojis, defaultPairsOfCards))
themes.append(createTheme("Hearts", heartEmojis, defaultPairsOfCards))
themes.append(createTheme("Sports", sportsEmojis, defaultPairsOfCards))
themes.append(createTheme("Weather", weatherEmojis, defaultPairsOfCards))
return themes
}()
얼레벌레 구현하기는 했는데 맞는 방향으로 한 건지는 모르겠다...뷰모델 짱더러움...ㅋㅎㅋㅎㅋㅎ 나름대로 기본 로직과 구조는 모델 안에 모델과 뷰를 연결하는 내용은 뷰 모델에, 상호작용 입력 받는 건 뷰에 할당해서 MVVM을 해본다고 해보긴 했는데 다음 강의를 봐야 어느정도 맞게 했는지 알 수 있을 것 같다
그리고 아직 잘 모르겠는건 언제는 static
으로 선언하는 게 낫고 언제는 그냥 init
으로 처리하는 게 나은지...?