[問題アプリケーション1]構造体
17313 ワード
今回作成するクイズソフトで質問があれば、TrueやFalseの質問に答えることができます.質問と回答を2 D配列と構造体として表現します.
//答えを入力すると、この関数が機能します.
1.答えはスキップしやすく、間違えたときに間違える
2.インデックスが範囲外でエラーが発生しました.
これらの問題を解決するには
質問と答え2次元配列 採点ユーザ回答
ユーザが「真」ボタンまたは「偽」ボタンを押すと、スコアが必要になるため、 問題が終了していないときに繰り返し続けるには、次の手順に従います.
繰り返すべきだと思いますので、
構造の作成 ViewControllerに戻り、2次元配列の代わりにstructを使用します. IBACTION関数で使用される配列も、構造体属性に置き換えられます.
評価結果はコンソールウィンドウでのみ表示されます.ユーザーに採点結果を見せるために、勉強を続けるつもりです.
ソースコードを使用してStoryboardのラベルとボタンを接続します。(Ctrl + Drag & Drop) (IBOutlet)
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var ProgressBar: UIProgressView!
@IBOutlet weak var trueButton: UIButton!
@IBOutlet weak var falseButton: UIButton!
IBACTIONを追加してすべてのtrueボタンfalseボタンを接続
//答えを入力すると、この関数が機能します.
@IBAction func answerButtonPressed(_ sender: UIButton) {
}
問題配列を作成しoverride関数で問題番号を割り当てて更新する
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 = [
"Four + Two is equal to Six",
"Five - Three is Greater than One",
"Three + Eight is less than Ten"
]
var questionNumber = 0 // 문제번호 초기화
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
updateUI() // updateUI()함수 호출
}
@IBAction func answerButtonPressed(_ sender: UIButton) {
// 문제번호를 하나씩 늘려간다
questionNumber += 1
updateUI()
}
func updateUI() { // 문제번호를 업데이트 하는 함수
questionLabel.text = quiz[questionNumber]
}
}
ここまで言うと、二つの問題があります.1.答えはスキップしやすく、間違えたときに間違える
2.インデックスが範囲外でエラーが発生しました.
これらの問題を解決するには
2 D配列を使用して評価
let quiz = [
["Four + Two is equal to Six","True"],
["Five - Three is Greater than One","True"],
["Three + Eight is less than Ten", "False"]
] // 2D Array
ユーザが「真」ボタンまたは「偽」ボタンを押すと、スコアが必要になるため、
answerButtonPressed
関数を実行する必要があります. @IBAction func answerButtonPressed(_ sender: UIButton) {
let userAnswer = sender.currentTitle
// 사용자의 답에 currentTitle의 sender 값을 넣는다 (True, False)
let actualAnswer = quiz[questionNumber][1] // 실제 답
// 사용자가 입력한 답 채점
if userAnswer == actualAnswer{ // 답이 맞으면
print("Right!")
} else { // 틀린 경우
print("Wrong!")
}
// 문제번호를 하나씩 늘려간다
if questionNumber + 1 < quiz.count {
// out of range index 오류를 해결하기 위해 +1 해준 것
questionNumber += 1
}
updateUI()
}
繰り返すべきだと思いますので、
while true{ ... }
の無限ループを使いたいと思っていましたが、私が思ったように実行そのものにはなりませんでした.しかし、簡単にするために if questionNumber + 1 < quiz.count {
questionNumber += 1
} else {
questionNumber = 0
}
else条件ですべて解題した場合、インデックスを0に設定して戻ります.配列ではなく構造体を使用する
file
-new file
-swift file
選択-名前の設定(ここではQuestion)-Create
カテゴリに新しいQuestionメニューが作成されます.import Foundation
struct Question {
let text: String
let answer: String
init(q: String, a: String){
text = q
answer = a
}
}
let quiz = [
Question(q: "Four + Two is equal to Six", a: "True"),
Question(q: "Five - Three is Greater than One", a: "True"),
Question(q: "Three + Eight is less than Ten", a: "False")
]
@IBAction func answerButtonPressed(_ sender: UIButton) {
let userAnswer = sender.currentTitle
let actualAnswer = quiz[questionNumber].answer
// 인덱스 대신 구조체 property를 사용함으로써 훨씬 보기가 편해졌다. 나는 답!
if userAnswer == actualAnswer{
print("Right!")
} else {
print("Wrong!")
}
if questionNumber + 1 < quiz.count {
questionNumber += 1
} else {
questionNumber = 0
}
updateUI()
}
func updateUI() {
questionLabel.text = quiz[questionNumber].text
// 나는 문제!
}
これまでの成果
評価結果はコンソールウィンドウでのみ表示されます.ユーザーに採点結果を見せるために、勉強を続けるつもりです.
Reference
この問題について([問題アプリケーション1]構造体), 我々は、より多くの情報をここで見つけました https://velog.io/@rubyy/Quiz-앱テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol