实战教程·元宇宙来了,准备好你的电子名片了吗?(八)
前提回顾
在上几个章节中,我们完成了Linkworld基本功能的搭建,也进一步了解了SwiftUI这一声明式语法的编程方式的魅力之处。
在本章中,我们继续学习本地化存储相关方法,那么让我们开始吧。
外链跳转:打开应用外浏览器
在之前的章节中,我们学习过使用WebKit在应用中打开Web网页的方法,这里再补充一个知识点— —如何唤起系统浏览器并打开网站。
在SwiftUI中唤起外链的方法是使用Link方法,和NavigationLink方式类似,NavigationLink导航跳转是在应用内跳转页面,而Link则是打开iOS本地浏览器并访问指定网站。
来到HomePageView页面,我们给创建一个新的按钮,如下代码所示:
// 打开浏览器按钮 func openWebBtn() -> some View { Image(systemName: "network") .font(.system(size: 17)) .foregroundColor(.blue) }
然后我们将按钮加到顶部导航菜单中,如下代码所示:
.navigationBarItems(leading: backBtn(),trailing: openWebBtn())
接下来我们来实现跳转方法,在openWebBtn中使用Link方法,如下代码所示:
css
复制代码
Link(destination: URL(string: "https://"+indexURL)!){ Image(systemName: "network") .font(.system(size: 17)) .foregroundColor(.blue) }
由于需要使用到系统浏览器做配合,因此需要“运行”模拟器设备上测试效果。如下图所示:
FileManager本地化存储
接下来我们来学习本地化存储,将请求回来的JSON文件数据和本地创建的数据缓存起来,在下一次打开时还可以操作上一次的数据。
我们来到ViewModel视图模型中,键入下面的代码:
// 获取设备上的文档目录路径 func documentsDirectory() -> URL { FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] }
FileManager是本地文件存储管理器,用于充当文件存储的中间桥梁。上述代码中我们创建了一个方法documentsDirectory允许开发者在可存取空间userDomainMask中使用沙盒documentDirectory,并返回一个URL路径。如此,文件存储器FileManager在整个应用中都可以被使用。
然后我们通过FileManager本地文件管理器访问放置数据的文件夹,我们可以放在plist文件中,如下代码所示:
// 获取plist数据文件的路径 func dataFilePath() -> URL { documentsDirectory().appendingPathComponent("Linkworld.plist") }
上述代码中,我们操作的便是使用FileManager本地文件管理器获得Linkworld.plist文件的路径,便于我们操作plist文件。