在主捆绑包的子目录中查找文件时获取nil

时间:2018-08-21 19:06:46

标签: swift file

我已将包含index.html的文件夹复制到项目中。

当我尝试获取文件夹中文件的路径时,我得到nil

let path = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "games/game1")

我也尝试使用“ / games / game1”字符串。不过不行。

但是当我将index.html移到项目的根目录并使用

let path = Bundle.main.path(forResource: "index", ofType: "html")

我得到正确的路径。

所以我的问题是如何在子文件夹中获取index.html的路径?

3 个答案:

答案 0 :(得分:1)

解决方案是使用

Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "games/game1")

我不知道为什么,但是如果我们得到一个路径,然后从中构造一个URL,这是行不通的。

注意:,您必须

  1. 根据需要复制项目
  2. 创建文件夹引用(不是“创建组”)
  3. 添加到目标

答案 1 :(得分:1)

请参阅Eugene的答案,这里是Swift 5的替代版本:

Bundle.main.url(forResource: "index", withExtension: "html", inDirectory: "games/game1")

答案 2 :(得分:0)

请参阅Apple文档link

  

总结
  苹果使用捆绑软件代表应用,框架,   插件以及许多其他特定类型的内容。捆绑包   它们包含的资源到定义明确的子目录中,并捆绑在一起   结构取决于平台和捆绑包的类型。   通过使用包对象,您无需访问包的资源即可   知道捆绑的结构。捆绑对象提供了一个   单个项目,用于查找项目,并考虑了捆绑销售   结构,用户首选项,可用的本地化及其他   相关因素。

     

捆绑结构取决于目标平台和类型   您正在构建的捆绑包。 Bundle类隐藏了此基础   大多数(但不是全部)情况下的结构。您使用的许多方法   从捆绑中加载资源会自动找到合适的位置   在目录中查找已知位置的资源。您可以   也使用此类的方法和属性来获取位置   已知捆绑目录的目录并专门检索资源   从这些目录中。

您可以在项目中的任何位置添加index.html文件,但同时要获取使用信息

let path = Bundle.main.path(forResource: "index", ofType: "html")