从'String?'垮掉'String'只展开选项

时间:2016-08-18 18:39:00

标签: ios swift

我正在尝试从.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")
}) 

如何修复错误?非常感谢。

1 个答案:

答案 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。