Skip to content

第22天 项目2 第三部分

在本项目中,你学习了图像、栈、渐变、按钮等知识,还接触了各种各样的新修饰符,这些都能帮助你将 UI 设计变为现实。

所有这些技能在你自己的 SwiftUI 应用中一定会派上用场 —— 不是可能会,而是肯定会。正如苏斯博士所说:“你读的书越多,知道的事情就越多;你学的东西越多,能去的地方就越多。” 而这正是本课程的目的:让你具备运用 SwiftUI 畅行无阻的能力,打造任何能助你实现目标的应用。

在进入下一个主题之前,我们需要暂停并回顾一下:你是否完全理解了所学的所有内容?这意味着还有一次测试,同时也有三个编程挑战,确保你能尽可能多地自己编写代码。

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

  • 猜国旗项目总结
  • 猜国旗项目练习题

完成这些后,告诉其他人:你已经完成了第二个 SwiftUI 项目,通过了测试,甚至还通过自己编写代码对项目进行了扩展。

你应该为自己取得的成就感到自豪 —— 做得好!

猜国旗项目总结

作者:Paul Hudson 2022 年 12 月 29 日

又一个 SwiftUI 应用完成了,其中包含了许多重要的新技巧。在你未来制作的几乎每个项目中,都会用到 VStackHStackZStack,而且你会发现,通过将它们组合在一起,就能快速构建复杂的布局。

很多人一开始会觉得 SwiftUI 显示警告框的方式有点奇怪:先创建警告框,设置触发条件,然后在之后的某个时刻触发该条件,这似乎比直接让警告框显示要麻烦得多。但就像我之前说的,视图必须始终能反映程序的状态,这就决定了我们不能随心所欲地显示警告框。

回顾所学内容

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

挑战

学习编程最好的方法之一就是尽可能多地自己编写代码,因此这里有三种扩展该应用的方式,帮助你确保完全理解其中的原理:

  1. 添加一个 @State 属性来存储用户的得分,当用户答对或答错时修改得分,然后在警告框和得分标签中显示得分。
  2. 当用户选择了错误的国旗时,在警告框消息中告知他们错误所在 —— 例如,“错了!那是法国的国旗。”
  3. 让游戏只显示 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)允许我们为视图背景应用毛玻璃风格的模糊效果。

本站使用 VitePress 制作