Skip to content

第73天 项目 14 第六部分

这又是一个颇具难度的项目,但你成功完成了它,希望你已经在思考如何运用所学技能了。无论是为购物应用集成地图、使用面容ID保护数据,还是其他用途,你在这里学到的每一项技能从长远来看都会有所回报。

今天我们进入项目的复习与挑战环节,在这一部分,你可以通过编写自己的代码进一步提升技能。正如拉尔夫·沃尔多·爱默生曾经说过的:“除非你尝试去做超出自己现有能力范围的事情,否则你永远不会成长。”所以,就把今天当作成长的一天吧!

今天你需要完成第14个项目的总结章节,完成复习部分,然后攻克所有三个挑战。

  • 愿望清单:总结
  • 第14个项目复习:愿望清单

愿望清单:总结

作者:Paul Hudson 2024年1月8日

我认为这是我们迄今为止规模最大的一个项目,但我们也涵盖了大量知识点:为自定义类型添加Comparable协议、查找文档目录、集成MapKit框架、使用生物识别认证、安全写入Data数据等等。当然,你现在又拥有了一个可实际运行的应用,希望你能完成下面的挑战,进一步完善它。

虽然我们制作的这个项目恰好以地图为核心,但地图在其他场景下作为附加功能也非常实用——比如显示会议举办地点、朋友的位置等,这些功能能为你的其他项目增添额外的实用细节。

回顾所学内容

任何人都能看完一个教程,但要记住所学内容还需要切实的努力。我的职责是确保你能从这些教程中收获尽可能多的知识,完成后面的练习题可以帮助你检验自己的学习成果。

挑战

学习编程的最佳方式之一之一就是尽可能多地编写自己的代码,因此我为你准备了三种扩展这个应用的方式,确保你能完全理解其中的原理。

  1. 允许用户能够在标准模式和混合模式之间切换地图模式。
  2. 我们的应用在生物识别认证过程中发生错误时会无声无声地失败,因此请添加代码,通过弹窗显示这些错误。
  3. 再创建一个视图模型,这次是为EditView创建的。你在视图模型中放入哪些内容由你决定,但我建议将dismissonSave保留在视图本身中——前者使用环境变量,该变量只能由视图读取,而后者移到模型中实际上并无额外益处。

提示: 最后一个挑战需要你在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: 即使用户删除了应用,其文档目录仍会保留在设备上。

本站使用 VitePress 制作