如何在swift中抛出和处理错误?
这是我的密码(Swift):如何在swift中抛出和处理错误?,swift,Swift,这是我的密码(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(
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参考”中找到的播放音频的方法:
``
因此,我返回一个字符串作为源路径,然后将其转换为NSURL。现在我想播放音频,但我使用的方法需要抛出错误并处理它。我应该如何抛出和处理错误?由于Swift 1.2,您不能抛出/处理异常。虽然它在swift2中可用(需要XCode7支持),但它仍处于测试阶段。有关详细信息,请参阅本文() Swift 2.0
AVAudioPlayer
将在其初始值设定项失败时引发异常。通过在do
/Catch
子句中包装其初始化来捕获错误
do {
let audioPlayer = try AVAudioPlayer(contentsOfURL: filePathUrl)
// use audioPlayer
} catch {
// handle error
}
如您所见,关键字try
插入到任何可能引发异常的方法调用之前。只要try
语句没有抛出
,您就可以正常继续代码。如果try
语句执行throw
,则程序将跳转到catch
子句
do {
let audioPlayer = try AVAudioPlayer(contentsOfURL: filePathUrl)
// use audioPlayer
} catch {
// handle error
}
检查错误
如果要检查错误,可以通过这样编写catch
语句将其转换为NSError
(如中所示):
只有当您想检查由Apple的Cocoa对象之一引发的错误时,才需要转换为NSError
。本机Swift代码抛出本机ErrorType
错误,无需转换
我建议你读苹果的
Swift 1.2 如果您使用的是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
}
有没有什么方法可以真正捕捉到Swift 2中的错误?@devios是的。检查您是否正在使用Apple的API,该API显示了如何将抛出的异常转换为N错误。或者如果您自己的Swift代码将抛出错误,在这种情况下,不需要NSError
var initError: NSError?
if let audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: &initError) {
// use audioPlayer
} else {
println(initError) // handle error
}