这是我的代码(Swift):
import UIKit
import AVFoundation
class PlaySoundViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if var filePath = NSBundle.mainBundle().pathForResource("movie_quote",ofType: "mp3"){
var filePathUrl = NSURL.fileURLWithPath(filePath)
AVAUdioPlayer audioPlayer = AVAudioPlayer(contentsOfURL:filePathUrl) throws
}
else{
print("filePath is empty")
}
}
@IBAction func playSlowAudio(sender: UIButton) {
}
func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这是我在“文档和API参考”中找到的播放音频的方法: ``
initWithContentsOfURL:error:
init(contentsOfURL url: NSURL) throws
因此,我返回一个String作为源路径,然后将其转换为NSURL。现在我想播放音频,但我使用的方法需要抛出错误并处理它。我应该如何抛出并处理错误?
答案 0 :(得分:3)
AVAudioPlayer
将抛出异常。通过将其初始化包装在do
/ catch
子句中来捕获错误。
do {
let audioPlayer = try AVAudioPlayer(contentsOfURL: filePathUrl)
// use audioPlayer
} catch {
// handle error
}
如您所见,在任何可以抛出异常的方法调用之前插入关键字try
。只要try
语句不是throw
,您就可以正常继续使用代码。如果try
语句为throw
,则程序将跳转到catch
子句。
如果您想检查错误,可以通过编写NSError
语句(如Apple's Objective-C/Swift Interoperability Docs中所示)将其转换为catch
:
do {
let audioPlayer = try AVAudioPlayer(contentsOfURL: filePathUrl)
// use audioPlayer
} catch let error as NSError {
// error is now an NSError instance; do what you will
}
只有在想要检查Apple的一个Cocoa对象引发的错误时,才需要转换为NSError
。原生Swift代码,抛出原生ErrorType
错误,无需转换。
我建议你阅读Apple的new docs on error handling in Swift。
如果您使用的是Swift 1.2,则无法使用错误处理。相反,AVAudioPlayer
的初始化方法将失败并返回nil
。
如果您使用的是Swift 1.2,我建议您按照以下方式初始化音频播放器:
var initError: NSError?
if let audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: &initError) {
// use audioPlayer
} else {
println(initError) // handle error
}
答案 1 :(得分:0)
从Swift 1.2开始,你不能抛出/处理异常。虽然它在swift2(需要XCode7支持)中可用,但仍处于测试阶段。有关详细信息,请参阅此文章(http://start-coding.blogspot.com/2015/07/android-development-in-windows-using.html)。