6

var testAudio私の iPhone アプリでの宣言について、ここでエラーが表示されます

「呼び出しはスローできますが、プロパティ初期化子からエラーをスローすることはできません」

import UIKit
import AVFoundation
class ViewController: UIViewController {
    var testAudio = AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource("testAudio", ofType: "wav")!), fileTypeHint:nil)

これは、Xcode 7 ベータ版に移行したときに発生しました。

このオーディオ クリップを Swift 2.0 で機能させるにはどうすればよいですか?

4

3 に答える 3

21

Swift 2 には新しいエラー処理システムがあります。詳細については、Swift 2 Error Handlingを参照してください。

あなたの場合、AVAudioPlayerコンストラクターはエラーをスローする可能性があります。Swift では、プロパティ初期化子でエラーをスローするメソッドを使用できません。これは、そこで処理する方法がないためです。init代わりに、View Controller が完了するまでプロパティを初期化しないでください。

var testAudio:AVAudioPlayer;

init() {
    do {
        try testAudio = AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource("testAudio", ofType: "wav")!), fileTypeHint:nil)
    } catch {
        //Handle the error
    }
}

これにより、オーディオ プレーヤーの作成時に発生する可能性のあるエラーを処理する機会が得られ、Xcode による警告が停止されます。

于 2015-06-11T17:17:02.437 に答える
2

エラーが返されないことがわかっている場合は、try! を追加できます。予め:

testAudio = try! AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource
于 2016-01-14T17:12:34.053 に答える
1

Swift 2.2で動作します

ただし、fileName.mp3 をプロジェクトに追加することを忘れないでください。[ビルド フェーズ] -> [バンドル リソースをコピー] (プロジェクト ルートを右クリック)

var player = AVAudioPlayer()

func music()
{

    let url:NSURL = NSBundle.mainBundle().URLForResource("fileName", withExtension: "mp3")!

    do
    {
        player = try AVAudioPlayer(contentsOfURL: url, fileTypeHint: nil)
    }
    catch let error as NSError { print(error.description) }

    player.numberOfLoops = 1
    player.prepareToPlay()
    player.play()

}
于 2016-05-08T20:13:03.527 に答える