こちらのメモは調査中ですが、とりあえず調べたものだけメモしておきます。\r\nBundle.main.url のメソットを調べているとどうも Bundle.main.path という似たものがあるようです。\r\n\r\nprint で見る限りでは、どちらも同じくビルドされた後にアプリ内のファイルを見ることが出来そうです\r\nググると大体は Bundle.main.path の説明がされていて、 Bundle.main.url についてはあまりヒットしない\r\nキーワードがかなり類似していることなどがありそうですが…\r\n\r\nただ純粋に同じようには記述出来ないです。\r\n※ 確認したのは AVFoundation での場合\r\n
test.mp3 を再生する際のコード\r\nBundle.main.url 使用時
\r\n\r\nif let url = Bundle.main.url(forResource: "test", withExtension: "mp3") {\r\ndo {\r\naudioPlayer = try AVAudioPlayer(contentsOf: url)\r\naudioPlayer?.play()\r\n} catch {\r\naudioPlayer = nil\r\n}\r\n} else {\r\nfatalError("URL is nil.")\r\n}
\r\n\r\n>> エラーなく実行される\r\n\r\n \r\n
test.mp3 を再生する際のコード\r\nBundle.main.path 使用時
\r\n\r\nif let url = Bundle.main.path(forResource: "test", ofType: "mp3") {\r\ndo {\r\naudioPlayer = try AVAudioPlayer(contentsOf: url) ← ここがエラー表示\r\naudioPlayer?.play()\r\n} catch {\r\naudioPlayer = nil\r\n}\r\n} else {\r\nfatalError("URL is nil.")\r\n}\r\n
\r\n\r\n>> エラーになる\r\n\r\nprint(type(of: url));\r\nで確認すると、エラー文を確認する感じは型の違いがありそうです。\r\n\r\nBundle.main.urlで取得した値は「URL」\r\nBundle.main.pathで取得した値は「String」\r\n\r\nでした。\r\n\r\nAVAudioPlayerの引数はURL型にしないといけないようです。\r\n試しに Bundle.main.path で取得した値(String型)をURL型に変換して実行するとエラー無く実行出来ました。\r\n\r\n扱いやすい型によって使い分けるという認識で大丈夫でしょうか。\r\n\r\nまた詳しくわかったら追記。\r\n\r\nアドバイスやコメントいただける方がいましたらお願いします。