【超初心者向け】Swiftで作るクイズアプリ
【最終更新日 2019/04/24】
プログラミング初心者が作れるアプリっていうのは、技術的に結構限定されてるんですが、その中でも比較的簡単なのは、やっぱクイズアプリでしょう。
僕はクイズアプリ→脱出ゲームって順番に出すことをおすすめしています。
この2つは技術的な難易度が低いので、初心者でも作りやすいですから。
ちなみに、プログラミング初心者の方には、こちらの記事がおすすめかもしれません。
プログラミングを独学して1年。今日までの勉強方法を書いてみる - ホーリーのプログラミング日記
これから書くことは、プログラミング(Swiftって言語)を軽く触った人向けの内容なので、プログラミング未経験の方は、まず簡単な勉強から始めるといいでしょうね。
そんなに難しいことはないですよ。僕は数年前までパソコンすら持ってなかったですが、1ヶ月位で基本をマスター出来ましたから。
学習に適した本と気合があれば大丈夫w
ガチニート適性試験
僕が初めて作ったクイズ形式のアプリはこれです。ガチニート適性試験。
問題が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
【関連記事】
クイズアプリで答えの順番をランダムにする方法(Swift) - ホーリーのプログラミング日記
P.S.
Swiftでゲームを作るのなら、この本がおすすめですね。
これは本当の初心者向けなんでいいですよ。
僕もこの本を読んで、3本ほどリリースすることが出来ました。
P.S.2
僕は基本的に本で勉強してるんですけど、サイトもいいのありますね。
王道はこれ。ドットインストール。
初めてリリースしたアプリは「来世占い」ってやつなんですけど。それはここで紹介されてる「iOSで姓名診断アプリを作ろう」ってページを見て作りました。
https://dotinstall.com/lessons/namescore_ios_v2
Xcodeの使い方も含めて、ドットインストールは勉強になりますよ。
ちなみに僕は有料会員になっています。有料会員じゃないと見れない動画とかあるんですよね。
P.S.3
クイズアプリを作る過程で行き詰まったら、テラテイルで質問するのもありでしょうね。これ無料でプログラミングの質問が出来るサービスなんですよ。
スタックオーバーフローの日本語版と言えばいいのかな?
エンジニア特化型Q&Aサイト【teratail(テラテイル)】
僕はシャイな性格なので実際に使ったことないんですが、ネット上で他人とやり取りするのに抵抗がない人は使った方がいいでしょうね。
確かどこまで使っても無料なので損はないですよ。
Swiftでクイズアプリを作る系の質問も結構あるみたいです。