第73天 项目 14 第六部分
这又是一个颇具难度的项目,但你成功完成了它,希望你已经在思考如何运用所学技能了。无论是为购物应用集成地图、使用面容ID保护数据,还是其他用途,你在这里学到的每一项技能从长远来看都会有所回报。
今天我们进入项目的复习与挑战环节,在这一部分,你可以通过编写自己的代码进一步提升技能。正如拉尔夫·沃尔多·爱默生曾经说过的:“除非你尝试去做超出自己现有能力范围的事情,否则你永远不会成长。”所以,就把今天当作成长的一天吧!
今天你需要完成第14个项目的总结章节,完成复习部分,然后攻克所有三个挑战。
- 愿望清单:总结
- 第14个项目复习:愿望清单
愿望清单:总结
作者:Paul Hudson 2024年1月8日
我认为这是我们迄今为止规模最大的一个项目,但我们也涵盖了大量知识点:为自定义类型添加Comparable协议、查找文档目录、集成MapKit框架、使用生物识别认证、安全写入Data数据等等。当然,你现在又拥有了一个可实际运行的应用,希望你能完成下面的挑战,进一步完善它。
虽然我们制作的这个项目恰好以地图为核心,但地图在其他场景下作为附加功能也非常实用——比如显示会议举办地点、朋友的位置等,这些功能能为你的其他项目增添额外的实用细节。
回顾所学内容
任何人都能看完一个教程,但要记住所学内容还需要切实的努力。我的职责是确保你能从这些教程中收获尽可能多的知识,完成后面的练习题可以帮助你检验自己的学习成果。
挑战
学习编程的最佳方式之一之一就是尽可能多地编写自己的代码,因此我为你准备了三种扩展这个应用的方式,确保你能完全理解其中的原理。
- 允许用户能够在标准模式和混合模式之间切换地图模式。
- 我们的应用在生物识别认证过程中发生错误时会无声无声地失败,因此请添加代码,通过弹窗显示这些错误。
- 再创建一个视图模型,这次是为
EditView创建的。你在视图模型中放入哪些内容由你决定,但我建议将dismiss和onSave保留在视图本身中——前者使用环境变量,该变量只能由视图读取,而后者移到模型中实际上并无额外益处。
提示: 最后一个挑战需要你在EditView的初始化器中创建一个State实例——记住要在属性名前加上下划线!
【练习题】愿望清单
问题1/12:以下哪些表述是正确的?
- 选项1:
Comparable协议要求我们告诉Swift,同一类型的两个对象中,哪个应在排序时排在前面。 - 选项2:
Map视图属于UIKit框架。
问题2/12:以下哪些表述是正确的?
- 选项1: iOS可以通过
completeFileProtection选项自动处理文件加密。 - 选项2:
italic()修饰符能将文本翻译成意大利语。
问题3/12:以下哪些表述是正确的?
- 选项1: 当面容ID认证完成后,iOS会在主actor上执行我们指定的闭包。
- 选项2:
Annotation允许我们在地图中放置任何类型的SwiftUI视图。
问题4/12:以下哪些表述是正确的?
- 选项1: 如果某个类型遵循
Comparable协议,我们就能使用无需参数的sorted()方法版本。 - 选项2: 向地图添加自定义文本的最佳方式是使用
Marker。
问题5/12:以下哪些表述是正确的?
- 选项1: Swift不允许我们在字典中放入数组。
- 选项2: 以原子方式写入数据意味着iOS会先写入临时文件,然后再执行重命名操作。
问题6/12:以下哪些表述是正确的?
- 选项1: Swift中的字符串和整数本身已遵循
Comparable协议。 - 选项2: 我们的文档目录只能存储文本或JSON,不能存储其他类型的文件。
问题7/12:以下哪些表述是正确的?
- 选项1: 每个iOS应用都有一个可用于存储文件的文档目录。
- 选项2: 所有iOS设备都支持面容ID。
问题8/12:以下哪些表述是正确的?
- 选项1: 所有类都应使用
@Observable宏。 - 选项2:
CLLocationCoordinate2D中的“CL”代表Core Location(核心定位)。
问题9/12:以下哪些表述是正确的?
- 选项1: 触控ID和面容ID均由LocalAuthentication(本地认证)框架提供支持。
- 选项2: MVVM代表“Multiple Views, Varying Models”(多视图,多模型)。
问题10/12:以下哪些表述是正确的?
- 选项1: SwiftUI不允许我们将文本字段直接绑定到可选字符串属性。
- 选项2:
CLLocationCoordinate2D遵循Codable协议。
问题11/12:以下哪些表述是正确的?
- 选项1: 在
URLSession上调用data(from:)方法必须使用await。 - 选项2: 不能在SwiftUI视图中使用
switch语句。
问题12/12:以下哪些表述是正确的?
- 选项1: SwiftUI要求地图标注数据必须具有唯一标识。
- 选项2: 即使用户删除了应用,其文档目录仍会保留在设备上。