回答編集履歴
1
test
CHANGED
@@ -5,20 +5,20 @@
|
|
5
5
|
```swift
|
6
6
|
class Alarm{
|
7
7
|
|
8
|
-
// audioPlayer が ! 付きで宣言されてるので、初期値は nil
|
8
|
+
// audioPlayer が ! 付きで宣言されてるので、初期値は nil
|
9
9
|
var audioPlayer: AVAudioPlayer!
|
10
10
|
|
11
11
|
// タイマーが動作している間、毎秒呼ばれるメソッド
|
12
12
|
@objc private func updateTimer(){
|
13
13
|
|
14
|
-
// 残り時間が 0 秒でない場合、秒数を減らす
|
14
|
+
// 残り時間が 0 秒でない場合、秒数を減らす
|
15
15
|
if seconds != 0{
|
16
16
|
seconds -= 1
|
17
17
|
|
18
|
-
// 残り時間が 0 秒になったら、タイマーを停止して音を鳴らす
|
18
|
+
// 残り時間が 0 秒になったら、タイマーを停止して音を鳴らす
|
19
19
|
}else{
|
20
20
|
do {
|
21
|
-
// ここで初めて audioPlayer に値がセットされる
|
21
|
+
// ここで初めて audioPlayer に値がセットされる
|
22
22
|
audioPlayer = try AVAudioPlayer(contentsOf: sound, fileTypeHint:nil)
|
23
23
|
|
24
24
|
// 以下略
|
@@ -27,7 +27,7 @@
|
|
27
27
|
となってますが、このクラスの使われ方は、
|
28
28
|
|
29
29
|
1. 画面を開くと同時に、Alarm オブジェクトが生成される
|
30
|
-
2. クイズ開始時に
|
30
|
+
2. クイズ開始時に runTimer が呼ばれ、タイマーが起動される (呼んでるところが見当たりませんが…)
|
31
31
|
3. タイマー起動後、毎秒 updateTimer が呼ばれて、seconds がどんどん減っていく
|
32
32
|
4a. 決められた時間が経つ前に全問解答した場合、タイマーと音を止める
|
33
33
|
4b. 決められた時間が経つと、updateTimer の else で音を鳴らす
|
@@ -40,4 +40,4 @@
|
|
40
40
|
|
41
41
|
そして、根本的な問題点としては、! は基本的に使うべきではないってことですね。例外は @IBOutlet くらいでしょう。また、QuizViewController から音を止めてますが、音を止めるのは stopTimer メソッドの中でやるべきかと。
|
42
42
|
|
43
|
-
ついでに言うと、updateTimer メソッドでは `sleepTimer?.invalidate()` でタイマーを止めてますが、stopTimer メソッドでは `sleepTimer!.invalidate()` と ! が使われてるのも気になります。if sleepTimer != nil でチェックしてるとはいえ、! を使うこと自体が間違いの元だと考え
|
43
|
+
ついでに言うと、updateTimer メソッドでは `sleepTimer?.invalidate()` でタイマーを止めてますが、stopTimer メソッドでは `sleepTimer!.invalidate()` と ! が使われてるのも気になります。if sleepTimer != nil でチェックしてるとはいえ、! を使うこと自体が間違いの元だと考えるべきです。if を使うなら if let すべきだし、この場合は ? で充分でしょう。
|