实战教程·元宇宙来了,准备好你的电子名片了吗?(八)(1)

简介: 实战教程·元宇宙来了,准备好你的电子名片了吗?

实战教程·元宇宙来了,准备好你的电子名片了吗?(八)


前提回顾

在上几个章节中,我们完成了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())

image.png

接下来我们来实现跳转方法,在openWebBtn中使用Link方法,如下代码所示:

css

复制代码

Link(destination: URL(string: "https://"+indexURL)!){
    Image(systemName: "network")
      .font(.system(size: 17))
      .foregroundColor(.blue)
}

image.png

由于需要使用到系统浏览器做配合,因此需要“运行”模拟器设备上测试效果。如下图所示:

image.png

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文件。


相关文章
|
SQL Java 编译器
SQL 语言:嵌入式 SQL 和动态 SQL
SQL 语言:嵌入式 SQL 和动态 SQL
232 4
|
存储 Swift
SwiftUI极简教程41:使用Segment、LazyVGrid和ImagePicker构建一个Logo生成器
在本章中,你将学会使用Segment分段器、LazyVGrid垂直网格、ImagePicker图片选择器构建一个Logo生成器。 在上一章中,我们完善了SearchBar搜索栏、TabView底部导航,还有做了一个Loading加载动作。最近突然有个想法,如果把色卡和图片进行组合,这不就是一个简单的Logo了吗?我能不能做个Logo生成器? 说干就干,我们继续完成App的相关内容。
802 0
SwiftUI极简教程41:使用Segment、LazyVGrid和ImagePicker构建一个Logo生成器
|
7月前
鸿蒙开发:了解@Builder装饰器
@Builder装饰是鸿蒙UI开发中,非常重要的一个装饰器,在实际的开发中,合理且正确的使用,能够让我们的代码更加的简洁,有两点需要注意,一是,是用私有还是全局,取决于当前的组件的复用机制,如果多个页面都使用了,建议以全局为主;二是传参的动态更新,有更新就使用引用参数传递,没有更新按值传递即可。
328 28
鸿蒙开发:了解@Builder装饰器
|
12月前
|
数据可视化 数据管理 测试技术
聊聊自动化测试框架
关于自动化测试框架的一些理解和思考总结,就是上面这些内容,提到的一些框架组件可能存在不合理的地方,仅供参考,如有更好的建议,请指出,不胜感激
167 4
聊聊自动化测试框架
|
存储 数据采集 JSON
英雄联盟手游能“干掉”王者荣耀?微博4.3亿网友吵翻了……
英雄联盟手游能“干掉”王者荣耀?微博4.3亿网友吵翻了……
248 3
英雄联盟手游能“干掉”王者荣耀?微博4.3亿网友吵翻了……
|
缓存 网络协议 Unix
Linux 内核参数
Linux 内核参数
459 1
每次都要写一堆样式代码?试试ViewModifier建立统一的样式规范吧
每次都要写一堆样式代码?试试ViewModifier建立统一的样式规范吧
122 1
|
机器学习/深度学习 自然语言处理 搜索推荐
技术下午茶:初识ChatGPT,触碰未来(3)
技术下午茶:初识ChatGPT,触碰未来
143 0
技术下午茶:初识ChatGPT,触碰未来(3)
|
人工智能
技术下午茶:初识ChatGPT,触碰未来(2)
技术下午茶:初识ChatGPT,触碰未来
131 0
技术下午茶:初识ChatGPT,触碰未来(2)
|
机器学习/深度学习 人工智能 自动驾驶
技术下午茶:初识ChatGPT,触碰未来(1)
技术下午茶:初识ChatGPT,触碰未来
166 0
技术下午茶:初识ChatGPT,触碰未来(1)