Developer Tools 入门 8m
天鹅任务第四章:序列完成
Swan's Quest, Chapter 4: The sequence completes
2020年6月25日
一句话判断
Swan’s Quest 最终章把前三章的音频检测、音调生成和图形绘制全部串联起来——你需要编解码一个序列来完成最终挑战,是一场综合考验 iOS 开发基础能力的编程冒险。
这场 Session 讲了什么
第四章是 Swan’s Quest 的最终章,需要综合运用前三章学到的技能来完成终极挑战。
这一章的核心编程任务涉及序列化(Serialization)和数据编解码:你需要把前三章收集到的信息(频率、图形、数据)编码成一个特定的序列格式,然后解码并执行正确的操作来完成冒险。
编程层面,你需要理解 Codable 协议、JSONEncoder/JSONDecoder 的使用、以及如何把不同类型的数据(音频频率、图形路径、字符串)统一序列化和反序列化。
完成全部四章后,玩家会获得一个「完成徽章」和来自虚拟角色的祝贺信息。整个体验设计得很像 RPG 游戏,但每个「关卡」的解决方案都是一段真实的 iOS 代码。
值得深挖的点
Codable 在实际场景中的应用
这一章让你在游戏中自然地学习 Codable。你需要定义数据结构来表示各种线索,用 JSONEncoder 把它们编码为字符串,再用 JSONDecoder 解码回来。这比看文档学 Codable 有效得多——你有一个明确的「把数据从 A 传到 B」的目标。
代码片段
import Foundation
// 定义 Swan's Quest 的线索数据结构
struct QuestClue: Codable {
let chapter: Int
let frequency: Double?
let symbol: String?
let timestamp: Date
}
struct QuestSequence: Codable {
let clues: [QuestClue]
let finalCode: String
}
// 编码序列
func encodeSequence() {
let sequence = QuestSequence(
clues: [
QuestClue(chapter: 1, frequency: 440.0, symbol: nil, timestamp: Date()),
QuestClue(chapter: 2, frequency: 880.0, symbol: nil, timestamp: Date()),
QuestClue(chapter: 3, frequency: nil, symbol: "star", timestamp: Date())
],
finalCode: "SWAN2020"
)
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
if let data = try? encoder.encode(sequence),
let jsonString = String(data: data, encoding: .utf8) {
print("编码结果: \(jsonString)")
}
}
// 解码序列
func decodeSequence(from jsonString: String) {
guard let data = jsonString.data(using: .utf8) else { return }
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
if let sequence = try? decoder.decode(QuestSequence.self, from: data) {
for clue in sequence.clues {
print("第 \(clue.chapter) 章线索:")
if let freq = clue.frequency {
print(" 频率: \(freq) Hz")
}
if let symbol = clue.symbol {
print(" 符号: \(symbol)")
}
}
}
}
最佳实践
- 先通读所有提示再动手。第四章的线索分散在前三章的完成结果中,先回顾一下你之前收集了什么。
- 不要跳过前三章直接做第四章。虽然技术上可行,但你缺少上下文,解谜的乐趣会大打折扣。
还有什么值得关注
- 完成全部四章后,Swift Playgrounds 会显示你的完成证书和统计数据。
- 苹果在 WWDC 2020 期间为完成 Swan’s Quest 的开发者准备了限量版成就徽章。
- 这个编程挑战的设计模式(交互式教程 + 解谜)是苹果教育团队的招牌手法,后续年份的 WWDC 也有类似活动。
WWDC 2020