回答編集履歴

1

2022/01/21 03:29

投稿

hoshi-takanori
hoshi-takanori

スコア7893

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. クイズ開始時に runTimer が呼ばれ、タイマーが起動される (呼んでるところが見当たりませんが…)
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 でチェックしてるとはいえ、! を使うこと自体が間違いの元だと考えた方がいいしょう。if を使うなら if let すべきだし、この場合は ? で充分なはず
43
+ ついでに言うと、updateTimer メソッドでは `sleepTimer?.invalidate()` でタイマーを止めてますが、stopTimer メソッドでは `sleepTimer!.invalidate()` と ! が使われてるのも気になります。if sleepTimer != nil でチェックしてるとはいえ、! を使うこと自体が間違いの元だと考えるべき。if を使うなら if let すべきだし、この場合は ? で充分でしょう