我正在尝试从.mid
读取DocumentDirectory
文件。我试过这个:
var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String
var midiFileURL = NSURL.fileURLWithPath(path)
问题是:
从'String?'中垮掉? 'String'只展开选项;你的意思是用'!'吗?
一旦我从DocumentsDirectory
读取文件,我希望能够用这个播放它:
guard let bankURL = NSBundle.mainBundle().URLForResource("gs_instruments", withExtension: "dls") else {
fatalError("\"gs_instruments.dls\" file not found.")
}
do {
try self.midiPlayer = AVMIDIPlayer(contentsOfURL: midiFileURL, soundBankURL: bankURL)
print("created midi player with sound bank url \(bankURL)")
} catch let error as NSError {
print("Error \(error.localizedDescription)")
}
self.midiPlayer.prepareToPlay()
self.midiPlayer.play({
print("midi done")
})
如何修复错误?非常感谢。
答案 0 :(得分:9)
NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first
正在给你Optional<String>
(a.k.a。String?
)。您正试图将其转换为String
。警告告诉你,你是以一种繁琐的方式做到这一点。你可以用!
:
var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
当然,因为你是强制解包,所以如果返回的值是nil
(如果没有first
...那么当集合为空时,你的应用程序可能会崩溃) )。
我强烈建议您阅读Swift Language Guide - The Basics中的Optionals。