[swift] 스택 뷰를 사용하여 동적인 퀴즈 앱 구현하기

소개

이번 블로그 포스트에서는 Swift 언어의 스택 뷰를 활용하여 동적인 퀴즈 앱을 구현하는 방법을 알아보겠습니다. 스택 뷰는 사용자 인터페이스를 구성하는 데 유용한 도구로, 여러 개의 뷰를 수평 또는 수직으로 정렬할 수 있습니다.

단계별 구현

1. 프로젝트 준비

먼저 Xcode에서 새로운 프로젝트를 생성합니다. “QuizApp”과 같은 이름으로 프로젝트를 설정하고, UI를 구성할 Storyboard 파일을 생성합니다.

2. 스택 뷰 추가하기

Storyboard에서 스택 뷰를 추가하기 위해 “Object Library”를 열고 “Stack View”를 검색합니다. 그런 다음, 스택 뷰를 원하는 위치로 끌어다 놓습니다. 스택 뷰를 선택하고 “Resolve Auto Layout Issues” 버튼을 클릭하여 “Reset to Suggested Constraints”를 선택합니다.

3. 퀴즈 문제 구성하기

스택 뷰 내에 퀴즈 문제를 구성하기 위해 필요한 컴포넌트를 추가합니다. 예를 들어, 라벨(Label)과 버튼(Button)을 사용하여 퀴즈의 질문과 선택지를 표시할 수 있습니다. 이러한 컴포넌트들을 스택 뷰 내의 정렬된 위치로 추가합니다.

예시 코드:

let questionLabel = UILabel()
questionLabel.text = "다음 중 가장 큰 수는?"
questionLabel.textAlignment = .center
stackView.addArrangedSubview(questionLabel)

let answerButton1 = UIButton(type: .system)
answerButton1.setTitle("10", for: .normal)
answerButton1.addTarget(self, action: #selector(answerButtonTapped(_:)), for: .touchUpInside)
stackView.addArrangedSubview(answerButton1)

let answerButton2 = UIButton(type: .system)
answerButton2.setTitle("5", for: .normal)
answerButton2.addTarget(self, action: #selector(answerButtonTapped(_:)), for: .touchUpInside)
stackView.addArrangedSubview(answerButton2)

let answerButton3 = UIButton(type: .system)
answerButton3.setTitle("3", for: .normal)
answerButton3.addTarget(self, action: #selector(answerButtonTapped(_:)), for: .touchUpInside)
stackView.addArrangedSubview(answerButton3)

4. 동적인 퀴즈 생성하기

퀴즈 앱을 더 동적으로 만들기 위해 퀴즈 문제와 정답을 배열로 관리합니다. 예를 들어, 다음과 같이 문제와 정답을 저장하는 Quiz 구조체를 생성할 수 있습니다.

예시 코드:

struct Quiz {
    let question: String
    let correctAnswer: Int
    let choices: [String]
}

let quizzes = [
    Quiz(question: "다음 중 가장 큰 수는?", correctAnswer: 0, choices: ["10", "5", "3"]),
    Quiz(question: "다음 중 가장 작은 수는?", correctAnswer: 2, choices: ["10", "5", "3"]),
    // 추가적인 퀴즈 추가 가능
]

5. 정답 확인하기

사용자가 선택한 답변을 확인하여 정답 여부를 판단하는 함수를 구현합니다. 예를 들어, 다음과 같은 코드를 사용하여 선택한 답변과 정답을 비교할 수 있습니다.

예시 코드:

@objc func answerButtonTapped(_ sender: UIButton) {
    guard let index = stackView.arrangedSubviews.firstIndex(of: sender),
          let currentQuiz = quizzes[safe: index] else {
              return
    }

    if index == currentQuiz.correctAnswer {
        print("정답입니다!")
    } else {
        print("오답입니다!")
    }
}

결론

이렇게 하면 스택 뷰를 사용하여 동적인 퀴즈 앱을 구현할 수 있습니다. 스택 뷰를 활용하면 UI 구성이 간편해지고, 동적인 요소를 쉽게 추가할 수 있습니다. 퀴즈 앱을 개발하면서 다양한 기능을 추가하고 개선해 보세요.

참고 자료