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

flmtquvp  于 2023-05-16  发布在  Swift
关注(0)|答案(3)|浏览(158)

我已经复制了一个包含index.html的文件夹到项目中。

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

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

我还尝试使用“/games/game 1”字符串。但不管用。
但是当我将index.html移动到项目的根目录并使用

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

我得到了一条正确的道路。
所以我的问题是如何获得子文件夹中index.html的路径?

hpxqektj

hpxqektj1#

解决方案是使用

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

我不知道为什么,但是如果我们得到一个路径,然后从它构造一个URL,它就不起作用了。

**注意:**必须

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

eyh26e7m

eyh26e7m2#

或者,在尤金的回答上加上,

Swift 5:

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

13z8s7eq3#

请参阅Apple Doc link
总而言之
Apple使用捆绑包来表示应用程序、框架、插件和许多其他特定类型的内容。捆绑包将其包含的资源组织到定义良好的子目录中,并且捆绑包结构根据平台和捆绑包的类型而变化。通过使用bundle对象,您可以在不知道bundle结构的情况下访问bundle的资源。捆绑包对象提供用于定位项目的单个界面,同时考虑捆绑包结构、用户偏好、可用本地化和其他相关因素。
捆绑包结构因目标平台和您正在构建的捆绑包类型而异。Bundle类在大多数(但不是全部)情况下隐藏了这个底层结构。您用来从包中加载资源的许多方法都会自动定位适当的起始目录并在已知位置查找资源。您还可以使用此类的方法和属性来获取已知捆绑包目录的位置,并专门从这些目录中检索资源。
您可以将index.html文件添加到项目中的任何位置,但在获取使用

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

相关问题