Skip to content

第99天 项目 19 第四部分

现在我们的应用程序已经完成,接下来是时候接受一些挑战来巩固你的知识,然后进行一个小测试,确保你记住所学的内容。

虽然这次的前两个挑战相当简单,但我认为第三个挑战会更有难度。希望在过去99天的学习中,你已经培养出了坚定的毅力,但即便如此,也希望你记住,失败并不可怕——正如西班牙作家何塞·贝尔加明所说:“做好失败的准备,就是为成功做准备。”

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

  • SnowSeeker 项目总结
  • SnowSeeker 项目复习

SnowSeeker 项目总结

作者:Paul Hudson 2024年3月17日

这个项目并不是特别复杂,但它仍然教授了一些新技能,例如分栏视图布局、可选警报、透明组布局、自定义环境类,甚至还有一种改进的文本列表格式化方式。同时,它也为你提供了练习许多核心技能的机会,比如处理Codable、创建滚动列表等等。

这类应用程序非常适合作为模板,因为它是那种你未来只需改变输入的内容类型,就可以反复使用的应用。模板应用程序以及其背后的技术,是iOS应用程序的“核心基础”:这种应用或许永远不会引起轰动,但它又非常实用且常见,是你不可或缺的工具。

复习所学内容

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

挑战

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

  1. ResortView图像上方添加图片版权信息。相关数据已从JSON中加载,你只需让它在界面上呈现出良好的效果即可。
  2. 完善Favorites的加载和保存方法。
  3. 这是一个真正有难度的挑战:让用户能够在ContentView中对度假村进行排序,可以选择默认顺序、按字母顺序排序,或者按国家顺序排序。

SnowSeeker 项目练习题

问题1/12:以下哪些陈述是正确的?

  • 选项1:所有iPhone在竖屏模式下都采用紧凑宽度尺寸类。
  • 选项2:alert()不支持可选数据。

问题2/12:以下哪些陈述是正确的?

  • 选项1:在同一类型中,一个static let属性可以引用另一个static let属性。
  • 选项2:iPad的尺寸类配置与iPhone完全相同。

问题3/12:以下哪些陈述是正确的?

  • 选项1:由SF Symbols图标生成的图像具有可自定义的前景样式。
  • 选项2:我们无法向SwiftUI视图添加计算属性。

问题4/12:以下哪些陈述是正确的?

  • 选项1:如果需要从环境中获取@Observable类的绑定,我们应该使用@Binding
  • 选项2:最大尺寸的iPhone(Max和Plus型号)在横屏模式下采用常规水平尺寸类。

问题5/12:以下哪些陈述是正确的?

  • 选项1:static let属性始终是延迟创建的。
  • 选项2:将属性标记为private意味着只有同一文件中的其他代码可以使用它。

问题6/12:以下哪些陈述是正确的?

  • 选项1:SwiftUI可以在单个NavigationSplitView中并排显示四个视图。
  • 选项2:我们可以使用dynamicTypeSize()修饰符来声明视图支持的动态类型尺寸。

问题7/12:以下哪些陈述是正确的?

  • 选项1:在iPad上,使用NavigationSplitView通常比使用NavigationStack效果更好。
  • 选项2:动态类型(Dynamic Type)提供五种不同的文本尺寸,我们需要全部支持。

问题8/12:以下哪些陈述是正确的?

  • 选项1:添加搜索栏可使用searchable()修饰符。
  • 选项2:添加搜索栏可使用searching()修饰符。

问题9/12:以下哪些陈述是正确的?

  • 选项1:SwiftUI无法在Text视图中显示字符串数组。
  • 选项2:我们可以将alert()修饰符绑定到可选值。

问题10/12:以下哪些陈述是正确的?

  • 选项1:所有iOS设备都具有水平和垂直尺寸类。
  • 选项2:Group始终会将其包含的视图水平排列,除非另行指定。

问题11/12:以下哪些陈述是正确的?

  • 选项1:如果将视图放置在Group内部,父视图会决定这些子视图的布局方式。
  • 选项2:NavigationLink的目标视图始终会在当前视图中显示。

问题12/12:以下哪些陈述是正确的?

  • 选项1:使用@Environment(YourObservableClass.self)创建属性,当该类的属性发生变化时,该属性会保持更新。
  • 选项2:VStack可以设置对齐方式或间距,但不能同时设置两者。

本站使用 VitePress 制作