Project 5에 관한 퀴즈를 풀고 챌린지 3문제를 해결한다.


Challenge

  1. 세글자보다 짧거나, 루트 단어와 같은 단어는 허용하지 않는다.
  2. 사용자가 원하는 경우 게임을 다시 시작할 수 있도록 startGame()을 호출하는 툴바를 추가한다.
  3. 루트 단어에서 새로운 단어를 만드는 경우 점수를 추가하기.

Challenge - 문제풀이

1번

세글자보다 짧은지 확인하는 함수와 시작 단어와 같은지 확인하는 함수를 따로 작성했다.

두 함수들은 addNewWord() 함수에서 호출했다.

// 3글자 이상인지 체크
func isValidLength(word: String) -> Bool {
	(word.count >= 3)
}

// 시작 단어와 다른 단어인지 체크

func isSame(word: String) -> Bool {
	!(rootWord == word)
}

호출부분

func addNewWord() {
        //입력값을 소문자로 변환하고 앞뒤 공백을 자른다.
        let answer = newWord.lowercased().trimmingCharacters(in: .whitespacesAndNewlines)
        
        // 3자 이상인지 체크
        guard isValidLength(word: answer) else {
            wordError(title: "Word too short", message: "3글자 이상")
            return
        }
        
        // 처음 제공된 단어와 같은 단어인지 체크
        guard isSame(word: answer) else {
            wordError(title: "Word is same", message: "처음 제공된 단어와 같은 단어입니다")
            return
        }

        ...
}

2번

ListNavigationTitle 수정자 밑에 toolbar 수정자를 추가하고 그 안에 Button 뷰를 배치했다. Button은 눌러질 때마다 startGame() 함수를 호출한다.

List {
	// 내용들
}
.navigationTitle(rootWord)
.toolbar {
	Button("Reset") {
		startGame()
	}
}

3번

점수를 저장하는 프로퍼티인 score를 추가하고, 답안의 글자 수 * 10으로 점수를 추가하는 함수addScore를 정의했다. addScoreaddNewWord 함수에서 단어를 리스트에 추가하고 newWord 변수를 초기화하는 부분 사이에서 호출했다.

struct contentView: View {
	@State private var score = 0 //점수를 기록

	...


}

func addNewWord() {
	...
	withAnimation {
		usedWords.insert(answer, at: 0)
	}

    // 점수를 추가
    addScore(word: answer)

    // 새로 입력할 단어를 초기화
    newWord = ""
}

func addScore(word: String) {
	score += word.count * 10
}

게임을 다시 시작할 때 점수도 초기화하기 위해 startGame() 안에 score = 0를 추가했다.

카테고리:

업데이트: