如何在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(

这是我的密码(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参考”中找到的播放音频的方法: ``


因此,我返回一个字符串作为源路径,然后将其转换为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
}