반응형
복습의 시간!
for, forEach, ForEach 는 다르다!
for 반복문
forEach 배열의 내부함수 고차함수, 클로저
ForEach 뷰를 반복하는 modifier
리소스에 대한 이야기
모든 리소스파일(코딩이외 파일 프로젝트중 start.txt 단어리스트 같은거)는 빌드 타임에는 bundle로 묶여서 resources 폴더에
한곳에 존재하게 된다. 그래서 프로젝트 내에 리소스파일은 동일한 이름을 쓰게되면, 오류가 발생한다!
그리고 오늘의 과제!
구구단을 입력한 단, 횟수만큼 문제를 내는 앱 만들기!
//
// ContentView.swift
// edutainment
//
// Created by HanTJ on 12/1/24.
//
import SwiftUI
struct Question {
var Q:String
var A:Int
}
struct ContentView: View {
@State private var multipleTable = 2
@State private var selectedQuestionCount = 0
let questionCount = ["5", "10", "20"]
@State private var Questions:[Question] = []
var questionIndex = 0
@State private var state = 0
@State private var currentQuestion:Question = Question(Q: "", A: 0)
@State private var inputAnswer = ""
var body: some View {
NavigationStack{
if state == 0 {
Form {
Section {
Stepper("구구단 \(multipleTable)단", value: $multipleTable, in : 2...9)
}
Section {
Picker("질문 갯수", selection: $selectedQuestionCount) {
ForEach(0..<questionCount.count, id: \.self) {
Text(self.questionCount[$0])
}
}
}
Section {
Button("게임시작") {
startGame()
}
}
}
}
else if state == 1 {
VStack {
Text(currentQuestion.Q)
TextField("답을 입력하세요", text: $inputAnswer)
Button("제출") {
checkAnswer()
}
}
}
}
}
func startGame() {
//선택한 갯수만큼 질문 생성
Questions.removeAll()
for _ in 1...Int(questionCount[selectedQuestionCount])! {
let number = Int.random(in: 1...9)
Questions.append(Question(Q: "\(multipleTable) * \(number) = ?", A: multipleTable * number))
}
currentQuestion = Questions.popLast() ?? Question(Q: "", A: 0)
state = 1
}
func checkAnswer() {
//답체크 후, 알림창 출력
if inputAnswer == String(currentQuestion.A) {
print("맞았다!")
} else {
print("틀렸다!")
}
currentQuestion = Questions.popLast() ?? Question(Q: "", A: 0)
if currentQuestion.Q == "" {
//게임종료
startGame()
state = 0
}
}
}
#Preview {
ContentView()
}
시간 관계상 알람창 띄우기, 애니메이션 넣기, 답입력한거 초기화 하기 점수 표기하기 등은 생략했다 -ㅠ-;
반응형