Today I Learned

20210623 Quizzler project -2

돌맹이시터 2021. 6. 24. 00:27

 

 

https://dmsitter.tistory.com/109

 

Swift - structure (구조체)

Structure (구조체) : string, int, float, double, boolean, array, dictionary와 같이 미리 빌드된 자료형 외에 custom 자료형을 만들 수 있게 해준다. 미리 빌드된 다른 자료형과 마찬가지로, structure의 이..

dmsitter.tistory.com

 

 

structure를 먼저 공부하고 와서 Quizzler app을 마저 만들어본다.

 

 

지난번에 2차원배열을 통해 만들었던 quiz 문항들을 structure 로 만든 퀴즈 배열로 바꿀 것이다.

먼저, 구조체를 만들기 위해 새 파일을 만들건데,

'File - New - File'을 통해 만들거나, 원하는 폴더를 우클릭 - New File...을 선택해도 된다.

Swift File을 선택한 뒤 파일명을 입력해준다. 

이 때 파일명은 구조체의 이름과 동일하게 짓는 것이 관습이다.

 

 

Question.swift에서 구조체를 만들어준다.

 

 

 

이제 ViewController.swift에서 quiz 배열의 항목들을 구조체의 배열로 변경해준다.

 

 

 

 

이어서, quiz를 사용하는 코드들도 수정해준다.

 

 

 

 

 

이제 구조체에 init을 만들어서 조금 더 코드가 짧아질 수 있도록 수정하고, Question 항목들을 추가할 것이다.

 

 

 

//
//  ViewController.swift
//  Quizzler-iOS13
//
//  Created by Angela Yu on 12/07/2019.
//  Copyright © 2019 The App Brewery. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var questionLabel: UILabel!
    @IBOutlet weak var progressBar: UIProgressView!
    @IBOutlet weak var trueButton: UIButton!
    @IBOutlet weak var falseButton: UIButton!
    
    let quiz = [
        Question(q: "A slug's blood is green.", a: "True"),
        Question(q: "Approximately one quarter of human bones are in the feet.", a: "True"),
        Question(q: "The total surface area of two human lungs is approximately 70 square metres.", a: "True"),
        Question(q: "In West Virginia, USA, if you accidentally hit an animal with your car, you are free to take it home to eat.", a: "True"),
        Question(q: "In London, UK, if you happen to die in the House of Parliament, you are technically entitled to a state funeral, because the building is considered too sacred a place.", a: "False"),
        Question(q: "It is illegal to pee in the Ocean in Portugal.", a: "True"),
        Question(q: "You can lead a cow down stairs but not up stairs.", a: "False"),
        Question(q: "Google was originally called 'Backrub'.", a: "True"),
        Question(q: "Buzz Aldrin's mother's maiden name was 'Moon'.", a: "True"),
        Question(q: "The loudest sound produced by any animal is 188 decibels. That animal is the African Elephant.", a: "False"),
        Question(q: "No piece of square dry paper can be folded in half more than 7 times.", a: "False"),
        Question(q: "Chocolate affects a dog's heart and nervous system; a few ounces are enough to kill a small dog.", a: "True")
        
    ]
    
    var questionNumber = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        updateUI()
    }
    
    @IBAction func answerButtonPressed(_ sender: UIButton) {
        
        let userAnswer = sender.currentTitle //True or False
        // let actualQuestion = quiz[questionNumber], 바로 아랫줄의 코드를 사용하기 위해 필요한 코드
        // let actualAnswer = actualQuestion.answer와 동일하다. 둘 중 편한 방법으로 사용하면 된다.
        let actualAnswer = quiz[questionNumber].answer
        
        
        if userAnswer == actualAnswer {
            print("Right!")
        } else {
            print("Wrong!")
        }
        if questionNumber < quiz.count - 1 {
            questionNumber += 1
        } else {
            questionNumber = 0
        }
        updateUI()
    }
    
    func updateUI() {
        questionLabel.text = quiz[questionNumber].text
    }
    
    
    
}