第24天 项目3 第二部分
阿尔伯特・爱因斯坦曾说过:“任何傻瓜都能知道答案,关键在于理解”,而本项目的核心目的就是让你更深入地理解 SwiftUI 的工作原理。毕竟,在接下来的 76 天里,你都要和它打交道,所以在继续学习之前,确保打下坚实的基础是非常有必要的。
我本可以直接告诉你 “SwiftUI 使用结构体来定义视图” 或者 “SwiftUI 经常用到 some View”,事实上,在你刚开始学习、只需要掌握这些基础内容的时候,我确实是这么说的。但现在你已经超出了基础阶段,理解自己正在使用的工具就变得尤为重要 —— 这样当你查看代码时,就不会再隐约觉得自己没搞懂某个东西的用途。
Swift 的很多特性都是专门为 SwiftUI 打造的,所以如果你看到某些特性时觉得超出了自己的水平,不用感到担心。仔细想想,在 Swift 带着这些特性发布之前,这些特性对所有人来说都属于超出水平的内容!
今天,你需要完成项目 3 的总结章节、章节对应的复习内容,然后完成所有三个挑战任务。
- 视图与修饰符:总结
- 项目 3 复习:视图与修饰符
完成这些任务后,别忘了保持责任感,向其他人分享你的学习进度!
视图与修饰符:总结
作者:Paul Hudson 2021 年 10 月 23 日
这些技术项目旨在深入探讨 SwiftUI 的特定主题,希望你已经从中学到了很多关于视图和修饰符的知识 —— 比如 SwiftUI 为什么用结构体定义视图、some View 为什么如此实用、修饰符的顺序为什么很重要等等。
视图和修饰符是所有 SwiftUI 应用的基础构建模块,这也是我在课程早期就重点讲解它们的原因。视图组合尤其关键,通过视图组合,我们可以创建小型、可复用的视图,再将这些视图像积木一样组装成更复杂的用户界面。
复习所学内容
任何人都能看完一个教程,但要记住教程里讲的内容,还需要付出实际的努力。我的职责是确保你能从这些教程中收获尽可能多的知识,完成后面的练习题,帮助你检验自己的学习成果。
挑战任务
学习编程最好的方法之一就是尽可能多地自己写代码,所以这里有三个扩展本应用的任务,帮助你彻底理解相关知识:
- 回到项目 1,使用条件修饰符,当用户选择 0% 的小费比例时,将总金额文本视图的颜色改为红色。
- 回到项目 2,用一个新的
FlagImage()视图替换原来用于显示国旗的Image视图,新视图要包含我们之前用到的那组特定修饰符,以渲染国旗图像。 - 创建一个自定义的
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: 颜色不能作为视图使用。