2016-08-18 4 views
3

私はiOS開発を初めて利用しています。 DocumentDirectoryから.midファイルを読み込もうとしています。私はこれを試してみました:'ストリングからダウンキャスト?' to 'String'はオプションのアンラップのみです

var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String 
var midiFileURL = NSURL.fileURLWithPath(path) 

問題がある:

意気消沈から '文字列?' to '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") 
}) 

にはどうすればエラーを修正しますか?どうもありがとう。

答えて

8

NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).firstは、Optional<String>(a.k.a. String?)です。これをStringにキャストしようとしています。警告はあなたが煩わしいやり方でこれをやっていることを伝えています。あなただけの!でそれをアンラップ強制することができます:もちろん

var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! 

、あなたが力アンラップをしているので、あなたは何firstがない場合には(返された値がnilある場合にクラッシュアプ​​リケーションを危険にさらします...コレクションが空の場合)。

Swift Language Guide - The Basicsのオプションカードについてお読みください。

+0

ありがとうございました。 – cch

+0

言語ガイドを読む時間を取ってください。それは物事、特にオプションのような言語の中心となる機能を説明する素晴らしい仕事をします。 – Alexander

+0

男には疑問を投げかけてください! – ospahiu

関連する問題