swift 获取位于Assets.xcassets中的数据集中文件的路径

wbgh16ku  于 2023-02-18  发布在  Swift
关注(0)|答案(1)|浏览(218)

我的Assets.xcassets中有一个音频文件的数据集:

我正在尝试获取其中一个音频文件的路径,如下所示:

let path: String = Bundle.main.path(forResource: "acoustic_grand_piano/A4", ofType: "f32")!

但是我得到了一个EXC_BAD_INSTRUCTION。我试着在互联网上寻找,但我没有找到任何数据集。
我怎样才能得到这些文件的内容?
谢谢!

jchrr9hc

jchrr9hc1#

试试这个:

  • 手动将文件放入文件夹中,可以随意命名。
  • 将. bundle附加到文件夹以创建一个包。您将收到一个警告,请接受它。恭喜,您刚刚创建了第一个包!:-)
  • 手动将该文件夹拖到您的应用中。
  • 使用以下代码获取文件....
public func returnFile(_ named:String) -> String {
     let path: String = Bundle.main.path(forResource: "myAudioFiles", ofType: "bundle")! + "/" + name + ".f32"        
     do {
         return try String(contentsOfFile: path)
     }
     catch let error as NSError {
         return error.description
     }
 }

现在,我的文件是CIKernel代码的文本文件。由于你的是音频文件,你可能需要改变字符串返回到其他东西。
编辑:
在我的例子中,我使用的是一个框架,因为我希望与扩展和其他应用程序共享这些文件/图像。如果你在这样的设置下工作,以下是未更改的代码:

public func returnFile(_ resource:String, _ fileName:String, _ fileType:String) -> String {
    let identifier = "com.companyname.appname" // replace with framework bundle identifier
    let fileBundle = Bundle.init(identifier: identifier)
    let filePath = (fileBundle?.path(forResource: resource, ofType: "bundle"))! + "/" + fileName + "." + fileType
    do {
        return try String(contentsOfFile: filePath)
    }
    catch let error as NSError {
        return error.description
    }
}

相关问题