Skip to content

第24天 项目3 第二部分

阿尔伯特・爱因斯坦曾说过:“任何傻瓜都能知道答案,关键在于理解”,而本项目的核心目的就是让你更深入地理解 SwiftUI 的工作原理。毕竟,在接下来的 76 天里,你都要和它打交道,所以在继续学习之前,确保打下坚实的基础是非常有必要的。

我本可以直接告诉你 “SwiftUI 使用结构体来定义视图” 或者 “SwiftUI 经常用到 some View”,事实上,在你刚开始学习、只需要掌握这些基础内容的时候,我确实是这么说的。但现在你已经超出了基础阶段,理解自己正在使用的工具就变得尤为重要 —— 这样当你查看代码时,就不会再隐约觉得自己没搞懂某个东西的用途。

Swift 的很多特性都是专门为 SwiftUI 打造的,所以如果你看到某些特性时觉得超出了自己的水平,不用感到担心。仔细想想,在 Swift 带着这些特性发布之前,这些特性对所有人来说都属于超出水平的内容!

今天,你需要完成项目 3 的总结章节、章节对应的复习内容,然后完成所有三个挑战任务。

  • 视图与修饰符:总结
  • 项目 3 复习:视图与修饰符

完成这些任务后,别忘了保持责任感,向其他人分享你的学习进度!

视图与修饰符:总结

作者:Paul Hudson 2021 年 10 月 23 日

这些技术项目旨在深入探讨 SwiftUI 的特定主题,希望你已经从中学到了很多关于视图和修饰符的知识 —— 比如 SwiftUI 为什么用结构体定义视图、some View 为什么如此实用、修饰符的顺序为什么很重要等等。

视图和修饰符是所有 SwiftUI 应用的基础构建模块,这也是我在课程早期就重点讲解它们的原因。视图组合尤其关键,通过视图组合,我们可以创建小型、可复用的视图,再将这些视图像积木一样组装成更复杂的用户界面。

复习所学内容

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

挑战任务

学习编程最好的方法之一就是尽可能多地自己写代码,所以这里有三个扩展本应用的任务,帮助你彻底理解相关知识:

  1. 回到项目 1,使用条件修饰符,当用户选择 0% 的小费比例时,将总金额文本视图的颜色改为红色。
  2. 回到项目 2,用一个新的 FlagImage() 视图替换原来用于显示国旗的 Image 视图,新视图要包含我们之前用到的那组特定修饰符,以渲染国旗图像。
  3. 创建一个自定义的 ViewModifier(以及对应的 View 扩展),使视图显示大号蓝色字体,适用于视图中醒目的标题。

【练习题】视图与修饰符

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

  • 选项 1: 应用修饰符的顺序会影响最终结果。
  • 选项 2: 每个修饰符对某个给定视图只能应用一次。

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

  • 选项 1: SwiftUI 视图会自动位于安全区域内,除非我们另行设置。
  • 选项 2: 我们可以创建自定义视图,但无法为自定义视图应用修饰符。

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

  • 选项 1: 将 SwiftUI 视图拆分为更小的视图,对性能几乎没有影响。
  • 选项 2: 视图一旦应用了背景颜色,就无法再更改。

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

  • 选项 1: some View 中的 some 关键字表示不透明返回类型。
  • 选项 2: 某个给定视图最多只能添加五个修饰符。

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

  • 选项 1: 更改视图的任何 @State 属性,都会导致 SwiftUI 重新调用 body 属性。
  • 选项 2: 在特殊情况下,视图的 body 可以返回 View 类型,而不是 some View 类型。

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

  • 选项 1: 如果一个 VStack 设置了前景色,且其内部的某些文本也设置了前景色,会使用 VStack 的前景色。
  • 选项 2: 如果一个 VStack 设置了前景色,且其内部的某些文本也设置了前景色,会使用文本的前景色。

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

  • 选项 1: 从 SwiftUI 视图的 body 中,必须始终返回 some View 类型。
  • 选项 2: 可以使用三元条件运算符来调整传递给修饰符的值。

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

  • 选项 1: SwiftUI 视图应该用结构体定义,而不是类。
  • 选项 2: 结构体不能包含闭包。

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

  • 选项 1: some View 允许 Swift 准确判断出返回的视图类型。
  • 选项 2: 视图不能与计算属性一起使用。

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

  • 选项 1: 自定义视图修饰符必须遵循 ViewModifier 协议。
  • 选项 2: 视图修饰符必须返回其接收的原始视图结构体。

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

  • 选项 1: SwiftUI 允许我们创建自己的自定义视图修饰符。
  • 选项 2: 视图组合指的是用视图创作音乐。

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

  • 选项 1: 可以为视图指定最大宽度和最大高度。
  • 选项 2: 颜色不能作为视图使用。

本站使用 VitePress 制作