Swift 封闭式捕捉并非详尽无遗(录音)
我正在设置录音机,但在Swift 封闭式捕捉并非详尽无遗(录音),swift,error-handling,audio-recording,avaudiorecorder,Swift,Error Handling,Audio Recording,Avaudiorecorder,我正在设置录音机,但在soundRecorder=try AVAudioRecorder(URL:getFileURL(),settings:recordSettings as![String:AnyObject])上遇到一个错误,由于所包含的捕获并非详尽无遗,因此不会处理从这里抛出的错误 func setUpRecorder() { let recordSettings = [AVFormatIDKey : Int(kAudioFormatAppleLossless), AVEnco
soundRecorder=try AVAudioRecorder(URL:getFileURL(),settings:recordSettings as![String:AnyObject])
上遇到一个错误,由于所包含的捕获并非详尽无遗,因此不会处理从这里抛出的错误
func setUpRecorder() {
let recordSettings = [AVFormatIDKey : Int(kAudioFormatAppleLossless), AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue, AVEncoderBitRateKey : 320000, AVNumberOfChannelsKey : 2, AVSampleRateKey : 44100.0 ]
var error: NSError?
do {
// soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings as [NSObject : AnyObject])
soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings as! [String : AnyObject])
} catch let error1 as NSError {
error = error1
soundRecorder = nil
}
if let err = error {
print("AVAudioRecorder error: \(err.localizedDescription)")
} else {
soundRecorder.delegate = self
soundRecorder.prepareToRecord()
}
}
你可以做几件事
do {
// soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings as [NSObject : AnyObject])
soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings as! [String : AnyObject])
} catch let error1 as NSError {
error = error1
soundRecorder = nil
} catch {
//Exhaustive catch all.
}
}
或者你可以这样写
do {
// soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings as [NSObject : AnyObject])
soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings as! [String : AnyObject])
} catch {
self.error = error as NSError
soundRecorder = nil
}
这应该行得通 错误消息具有误导性。A
catch let error1 as NSError
是详尽的,因为所有错误都被桥接到NSError
自动地
编译器似乎被强制转换弄糊涂了
recordSettings as! [String : AnyObject]
这会导致错误的错误消息。解决方案是创建
首先使用正确类型的设置字典:
let recordSettings: [String: AnyObject] = [
AVFormatIDKey : Int(kAudioFormatAppleLossless),
AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
AVEncoderBitRateKey : 320000,
AVNumberOfChannelsKey : 2,
AVSampleRateKey : 44100.0 ]
var error: NSError?
do {
soundRecorder = try AVAudioRecorder(URL: getFileURL(), settings: recordSettings)
} catch let error1 as NSError {
error = error1
soundRecorder = nil
}