Hacking with iOS: SwiftUI Edition - Word Scramble 项目——从App Bundle中加载资源文件

Hacking with iOS: SwiftUI Edition - Word Scramble 项目——从App Bundle中加载资源文件_第1张图片

当我们使用Image视图时,SwiftUI会知道在应用程序的资源目录中查找图片,它甚至会自动调整图片,以便为当前屏幕分辨率加载正确的图片——这就是我们查看到的 @2x 和 @3x 内容。

对于其他数据,例如文本文件,我们需要做更多的工作。如果您具有特定的数据格式(例如XML或JSON),这也适用——无论加载哪种文件类型,它都需要完成相同的工作。

Xcode构建您的iOS应用时,会创建一个称为“Bundle”的东西。这种情况发生在包括macOS在内的所有Apple平台上,并且允许系统将一个应用程序的所有文件存储在一个地方——二进制代码(实际上编译了我们编写的Swift代码的东西),所有的图片,我们提供的任何其他文件,我们的Info.plist文件,以及更多,全部集中在这个地方。

将来,随着技能的提高,您将学习如何在单个应用程序中实际包含多个"Bundle",并允许您在单个iOS应用程序中的Bundle中编写Siri扩展,iMessage应用程序,watchOS应用程序等内容。,称为"Main Bundle"。

所有这些都很重要,因为通常需要在文件夹中查找放置在其中的文件。这使用了一种称为URL的新数据类型,该数据类型几乎完全存储您的所知道的内容:一个 URL,例如 https://www.jianshu.com/u/855d6ea2b3d1。然鹅~,URL远比仅存储网址强大——它们还可以存储文件的位置,这就是为什么它们在这里有用的原因。

让我们开始编写一些代码。如果要读取主应用程序捆绑包中文件的URL,请使用Bundle.main.url()。如果文件存在,则会将其返回给我们,否则将返回nil,因此这是一个可选URL。这意味着我们需要像这样解包:

if let fileURL = Bundle.main.url(forResource: "some-file", withExtension: "txt") {
    // we found the file in our bundle!
}

URL中的内容并不重要,因为iOS使用了无法猜测的路径——我们的应用程序位于其自己的沙箱中,我们不应该尝试在其外部进行读取。

一旦有了URL,就可以使用特殊的初始化程序将其加载到字符串中:String(contentsOf :)。我们给它一个文件 URL,如果可以加载,它将发送一个包含该文件内容的字符串。如果无法加载,则会引发错误,因此您需要使用trytry?调用它。像这样:

if let fileContents = try? String(contentsOf: fileURL) {
    // we loaded the file into a string!
}

有了文件的内容后,就可以随心所欲地处理它——它只是一个常规字符串。

译自 Loading resources from your app bundle

Previous: Word Scramble 项目——List 介绍 Hacking with iOS: SwiftUI Edition Next: Word Scramble 项目

赏我一个赞吧~~~

你可能感兴趣的:(Hacking with iOS: SwiftUI Edition - Word Scramble 项目——从App Bundle中加载资源文件)