teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

訂正追記

2019/01/04 12:20

投稿

izkn
izkn

スコア1698

answer CHANGED
@@ -35,6 +35,28 @@
35
35
  }
36
36
  ```
37
37
 
38
- `var player = AVAudioPlayer()`はインスタンス生成というよりはプロパティの宣言と考える。
38
+ ~~`var player = AVAudioPlayer()`はインスタンス生成というよりはプロパティの宣言と考える。~~
39
39
  音を鳴らすにはインスタンスプロパティとして保持する必要があります。
40
- `var player = AVAudioPlayer()`を`viewDidLoad`の中に書いてしまうと解放されてしまうので、音が鳴りません。二つ目のコードも同様です。
40
+ `var player = AVAudioPlayer()`を`viewDidLoad()`の中に書いてしまうと解放されてしまうので、音が鳴りません。二つ目のコードも同様です。
41
+
42
+ ---
43
+
44
+ >
45
+ 「var player = AVAudioPlayer()はインスタンス生成というよりはプロパティの宣言と考える。」 とありますが,参考書では「// シンバル用のプレイヤーインスタンスを作成」となっており,どちらが正しいのか困惑しております.
46
+
47
+ ```swift
48
+ // シンバル用のプレイヤーインスタンスを作成
49
+ var cymbalPlayer = AVAudioPlayer()
50
+
51
+ @IBAction func cymbal(_ sender: Any) {
52
+ do {
53
+ // シンバル用のプレイヤーに、音源ファイル名を指定
54
+ cymbalPlayer = try AVAudioPlayer(contentsOf: cymbalPath, fileTypeHint: nil)
55
+ ```
56
+ 参考書の方を採用してください。余生混乱させてしまいましたね。失礼いたしました。`var player: AVAudioPlayer!`と書いて初期化せず宣言だけの記述にした方が理解しやすいかと思ったのですが、参考書の説明の流れなら参考書を。
57
+
58
+ >
59
+ 「var player = AVAudioPlayer()をviewDidLoadの中に書いてしまうと解放されてしまう」 とありますが,解放とはなんでしょうか.
60
+
61
+ そのお使いの参考書に変数のスコープ、有効範囲について書かれている箇所はありますか。
62
+ `AVAudioPlayer`インスタンスを保持する変数を`viewDidLoad()`メソッドのローカル変数として定義するとメソッドの終了とともに変数も無くなります。