第22天 项目2 第三部分
在本项目中,你学习了图像、栈、渐变、按钮等知识,还接触了各种各样的新修饰符,这些都能帮助你将 UI 设计变为现实。
所有这些技能在你自己的 SwiftUI 应用中一定会派上用场 —— 不是可能会,而是肯定会。正如苏斯博士所说:“你读的书越多,知道的事情就越多;你学的东西越多,能去的地方就越多。” 而这正是本课程的目的:让你具备运用 SwiftUI 畅行无阻的能力,打造任何能助你实现目标的应用。
在进入下一个主题之前,我们需要暂停并回顾一下:你是否完全理解了所学的所有内容?这意味着还有一次测试,同时也有三个编程挑战,确保你能尽可能多地自己编写代码。
今天,你需要完成项目 2 的总结章节,完成复习内容,然后攻克所有三个挑战。
- 猜国旗项目总结
- 猜国旗项目练习题
完成这些后,告诉其他人:你已经完成了第二个 SwiftUI 项目,通过了测试,甚至还通过自己编写代码对项目进行了扩展。
你应该为自己取得的成就感到自豪 —— 做得好!
猜国旗项目总结
作者:Paul Hudson 2022 年 12 月 29 日
又一个 SwiftUI 应用完成了,其中包含了许多重要的新技巧。在你未来制作的几乎每个项目中,都会用到 VStack、HStack 和 ZStack,而且你会发现,通过将它们组合在一起,就能快速构建复杂的布局。
很多人一开始会觉得 SwiftUI 显示警告框的方式有点奇怪:先创建警告框,设置触发条件,然后在之后的某个时刻触发该条件,这似乎比直接让警告框显示要麻烦得多。但就像我之前说的,视图必须始终能反映程序的状态,这就决定了我们不能随心所欲地显示警告框。
回顾所学内容
任何人都能看完一个教程,但要记住所学的知识,还需要付出实际的努力。我的职责是确保你能从这些教程中收获尽可能多的知识,请完成后面的练习题,帮助你检验自己的学习成果。
挑战
学习编程最好的方法之一就是尽可能多地自己编写代码,因此这里有三种扩展该应用的方式,帮助你确保完全理解其中的原理:
- 添加一个
@State属性来存储用户的得分,当用户答对或答错时修改得分,然后在警告框和得分标签中显示得分。 - 当用户选择了错误的国旗时,在警告框消息中告知他们错误所在 —— 例如,“错了!那是法国的国旗。”
- 让游戏只显示 8 道题,答题结束后,用户会看到一个最终警告框,显示对其得分的评价,并且可以重新开始游戏。
注意:最后一个挑战比前两个需要多一些思考。一个不错的切入点是添加第二个 alert() 修饰符,让它监听另一个布尔值属性,然后将警告框的按钮与 reset() 方法关联,使游戏恢复到初始状态。
猜国旗项目练习题
第 1/12 题:以下哪些陈述是正确的?
- 选项 1:
ZStack允许我们将视图分层叠加。 - 选项 2:装饰性图像总会被屏幕阅读器读取。
第 2/12 题:以下哪些陈述是正确的?
- 选项 1:每个
VStack都必须包含一个Spacer视图。 - 选项 2:语义化颜色是根据用途而非色调命名的颜色。
第 3/12 题:以下哪些陈述是正确的?
- 选项 1:可以使用颜色数组或色标数组创建渐变。
- 选项 2:“圆锥渐变” 是径向渐变的另一种说法。
第 4/12 题:以下哪些陈述是正确的?
- 选项 1:在 SwiftUI 中,颜色属于视图。
- 选项 2:我们可以从视图的 body 中返回
nil。
第 5/12 题:以下哪些陈述是正确的?
- 选项 1:一个视图最多只能应用三个修饰符。
- 选项 2:
frame()修饰符允许我们为视图指定精确的宽度和高度。
第 6/12 题:以下哪些陈述是正确的?
- 选项 1:SwiftUI 允许我们创建具有特定颜色和半径的阴影。
- 选项 2:可以使用 SwiftUI 的
Capsule形状创建圆角矩形。
第 7/12 题:以下哪些陈述是正确的?
- 选项 1:安全区域不包含主屏幕指示器占用的空间。
- 选项 2:渐变绝对不能在安全区域外使用。
第 8/12 题:以下哪些陈述是正确的?
- 选项 1:按钮可以是纯文本形式,也可以包含图像,还可以包含其他类型的视图。
- 选项 2:一个栈中最多只能包含 10 个视图。
第 9/12 题:以下哪些陈述是正确的?
- 选项 1:必须为按钮指定一个闭包,用于处理点击事件。
- 选项 2:苹果的符号图标集合名为 Wingdings。
第 10/12 题:以下哪些陈述是正确的?
- 选项 1:
Int.random(in:)方法会从我们指定的范围内选择一个随机整数。 - 选项 2:数组不能与
@State一起使用。
第 11/12 题:以下哪些陈述是正确的?
- 选项 1:可以通过调用
show()方法来显示警告框。 - 选项 2:可以将
HStack嵌入到VStack中。
第 12/12 题:以下哪些陈述是正确的?
- 选项 1:可以通过调用
randomize()方法来打乱数组。 - 选项 2:材质(Materials)允许我们为视图背景应用毛玻璃风格的模糊效果。