2016-09-16 5 views
2

iOSアプリのアセットカタログに保存されているmp3ファイルを再生しています&アプリ全体の有効範囲のプレーヤーを宣言すると、AVAudioPlayerが宣言されています。私のコードは正常に動作しますが、もしこれが貧弱な練習であるかどうかを知りたければ、&です。そうのようなオーディオを再生するほとんどのコード例では、オプションとしてAVPlayerを宣言したが、宣言でプレーヤーを作成しないでください:私はB/Cの下に実装AVAudioPlayer()を変数宣言で作成し、オプション/アンラッピングを避けることはできますか?

var audioPlayer: AVAudioPlayer? 

がoptionalsへの参照を持っているか、強制アンラップしない(I私はスウィフトでちょうど盛り上がっていますが、私はこれを初期の "Get Excited"の例として使っていますので、最初のアプリでメディアを再生することができます。

// AVAudioPlayerを宣言し、空のプレイヤーを割り当てる

var audioPlayer = AVAudioPlayer() 

//おかげ//

func playSound() { 
    if let sound = NSDataAsset(name: "sound0") { 
     do { 
      try audioPlayer = AVAudioPlayer(data: sound.data) 
      audioPlayer.play() 
     } catch { 
      print("ERROR: Couldn't create the AVAudioPlayer") 
     } 
    } else { 
     print("ERROR: Couldn't load sound file from asset catalog. Verify file is a valid sound file and that the name is correct.") 
    } 
} 

"sound0" という名前のアセットファイルにmp3の音を再生するには、この関数を呼び出します!

答えて

1

AVAudioPlayerを宣言することは、サウンドの再生中にオブジェクトが保持されるようにすることを前提としているため、行ったようにプレイヤーをプロパティとして宣言することをお勧めします。

私はあなたの目標が後になるまでオプションの学習を延期したいので、プレイヤーを空のプレーヤーに設定することで達成しようとしていることがわかります。

私は暗黙のうちに、オプションのプレーヤーを宣言示唆する:

のvar audioPlayer:AVAudioPlayer!

明示的にオプションの変数はアンラッピングする必要はありません。使用する前に変数がnilではなく、initメソッドで初期化することができないことがわかっている場合は、素晴らしいことです。

生徒に「!」の心配はしないように指示できます。今のところ、コードサンプルで使用しているのと同じaudioPlayerを使用しています。 (実際には、ほとんどのIBOutletsはUI実装時にこのように宣言されています)

使用されていないオブジェクトにメモリを割り当てているため、プレーヤーを空のプレーヤーに設定することはおすすめできません。

希望に役立ちます!

+0

暗黙のオプションの詳細については、次の記事をご覧ください:http://stackoverflow.com/questions/24006975/why-create-implicitly-unwrapped-optionals –

+0

ありがとうございます。これはすべて非常に役に立ちます。そして、アプローチがOKであることを確認してくれてありがとう! – Gallaugher

関連する問題