ホーリーのプログラミング日記

ホーリーのプログラミング日記

プログラミング初級者。歴2年。独学。てきとーなアプリを量産しています。現在の総ダウンロード数:5万

【超初心者向け】Swiftで作るクイズアプリ

 

プログラミング初心者が作れるアプリっていうのは、技術的に結構限定されてるんですが、その中でも比較的簡単なのは、やっぱクイズアプリでしょう。

僕はクイズアプリ→脱出ゲームって順番に出すことをおすすめしています。

この2つは技術的な難易度が低いので、初心者でも作りやすいですから。

 

ガチニート適性試験

僕が初めて作ったクイズ形式のアプリはこれです。ガチニート適性試験。

 

 

問題が10問出題されるんですが、それに対して2択で答えていくって内容です。

正解か不正解かの判定をして、途中で間違えたら最初からって内容で、コードを書きました。

実際に参考にしたサイトや、自分がつまづいたポイントなんかを、これから書いていこうと思います。

 

Jared Davidsonさん 

最初に結論から言うと、僕はこのJared Davidsonさんの動画を参考にしました。

なんか作り方を書いてるサイトがあるかと思ったんですけど、ちょうどいいのがなかったんですよね。

Objective-Cではあったんですが、Swiftでは見当たりませんでした。

 


思いっきり英語なんですが、使ってるのは同じXcodeだし、言語もSwiftなので全く問題ありません。

途中の小ボケが拾えた人は、もう十分に理解してると思っていいでしょう。

(微妙なところでカマしてくるんですよw)

 

正解不正解の判定

クイズアプリを作るのに必要なことは、ザックリ3つ。正解と不正解の判定、問題数のカウント。問題のシャッフル。この3つを抑えればとりあえず作れるはずです。

んで、まずは正解不正解の判定から書いていきましょう。

 

動画を見れば正解不正解の判定は分かるんですが、ザックリ言えばあれです。

正解となる変数を定義しておいて、問題ごとに、その変数を変えればいいんですよ。

 

 var CorrectAnswer = 0

 

みたいに定義しておいて、問題が出るたびにこの値を変えればいいんです。

「はい」と「いいえ」の2択の問題なら、例えば「はい」のときはCorrectAnswerを1にすると。

んで、「はい」を押したら正解の画面を出してやればいいんです。画面遷移(移動)してもいいですし、今の画面に丸印を表示してもいいですね。その辺は適当にやってみてください。

 

2つのボタン、例えば「はい」と「いいえ」を作る。

「はい」を選んだときはCorrectAnswerが1なら正解。「いいえ」のときはCorrectAnswerが2なら正解。逆の場合は不正解。なんて風に書けばOKです。

細かいところは動画をチェックしてみてください。

 

問題数のカウント

問題数のカウントはAppDelegate.swiftの中にvar myCount = 0みたいな値を定義して、これを増やしていくことで実装しました。

AppDelegate.swiftの中に変数を定義すると、全画面共通で、その値を取れるんですよ。確か。

iPhoneアプリ開発の教科書にそんなことが書いてあったので、それをそのまま真似しました。

 

問題のシャッフル

上記の動画だと、出てくる問題が本当のランダムで、重複が考慮されてないと思います。ようは1問目と2問目が同じ問題になるって可能性があるわけです。あのコードだと。

ただ、問題っていつも順番をランダムにしたいじゃないですか。仮に10問作るとしても、毎回出てくる順番が同じっていうんじゃ、ちょっと味気ないでしょう。毎回1問目から10問目まで同じみたいな。

 

それでこれを実現するには色々な方法があるんでしょうけど、僕がやったのはあれです。配列のシャッフルです。

10問を用意したので、まず最初に配列の中に0〜9までの値を入れるんですよ。それでそれと問題文を紐付けて、例えば3が出たらこの問題、みたいにしました。

 

シャッフルするにあたって、参考にしたサイトはこれです。

Swiftで配列の要素をシャッフルするプログラムを作ってみました - hiramatch's blog

 

これが超便利。なんか色んなところに応用出来そうです。

でも一点だけ注意点が。

 

var cnt = array.count
for(var i=0; i<cnt; i++){
   
var idx = Int(arc4random()) % array.count

 

このコードなんですが、このまま書いたら、iPhone5以下でクラッシュしました。

5SならOKで、5や4Sだとダメなんですよ。

 

んでこれは、5以下のCPUが32ビット、それ以降が64ビットになったのが関係あるらしく、書いてる僕もよく分からなんですか、以下のコードにしたら解決しました。

 

var cnt = array.count

for(var i=0; i<cnt; i++){

  var idx = Int(arc4random() % UInt32(array.count))

 

arc4randomのところですね。ここでUInt32を使うってことです。

上記のシャッフルを使う人は、参考にしてみてください。

 

最後に 

多分紹介した動画を見れば、そこそこ出来ると思います。

難しいことをやろうとすれば、それはクイズでも結構なことが出来るんでしょうが、最初は最低限で構わないでしょう。

とりあえず作ってみるのが大事かと。まあ僕が作った「ガチニート適性試験」はすこぶるシンプルですよ。これ超えればOK、て感じでやってみてくださいw