AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
Swift
Swift
级别 65
async throws 与 try await 的顺序
Swift SELF
等级 65,
课时 0
我们来分析,为什么 Swift 中的异步函数经常采用
async
throws
这一契约,如何正确阅读这样的签名,为什么调用时必须严格遵循
try
await
的顺序,它与
do
/
catch
如何配合,以及何时适合使用简写形式
try?
和
try!
。最后还会看一些典型错误,以及在教学用
LibraryCLI
中的一个小型集成。
启动 async 代码:
Task {}
和 async 入口
Swift SELF
等级 65,
课时 1
我们来分析为什么
await
只能出现在
async
上下文中,异步 CLI 程序的入口点是如何组织的(
@main
+
static
func
main()
async
和
main.swift
两种方案),以及什么时候真的需要通过
Task
把 sync 桥接到 async。还会实践
Task<Success, Failure>
句柄、通过
await
task
.
value
等待,以及 CLI 中的典型错误清单。
Cancellation — Task.isCancelled
Swift SELF
等级 65,
课时 2
我们来讲 Swift Concurrency 中任务的协作式取消:为什么调用
task.cancel()
只是一个信号,如何通过
Task.isCancelled
做出正确响应(使用
return
进行柔性退出并返回部分结果),以及通过
Task.checkCancellation()
(在
CancellationError
的
async
throws
代码中退出)。最后还会讲 CLI 中的实战集成和常见错误清单。
withTimeout(...) 的规范化超时 helper
Swift SELF
等级 65,
课时 3
我们来拆解如何为 Swift Concurrency 组装一个简单而可靠的超时机制:并行启动操作和基于
Task.sleep(nanoseconds:)
的计时器,在达到期限后调用
cancel()
,并把
CancellationError
转换为领域错误
TimeoutError
。我们会固定带有
@escaping
的规范签名,展示一个用于 CLI 的示例(
LibraryCLI
),并讨论这种方案的典型错误与限制。
URLSessionHTTPClient — 围绕 URLSession 的适配器
Swift SELF
等级 65,
课时 4
我们来拆解:为什么要在
URLSession
之上做一个薄薄的传输适配器:把请求发送与响应解释分离,把
URLResponse
转成
HTTPURLResponse
,并统一把错误转换为
NetworkError
。我们将通过
send(_:)
(
async
/
throws
)实现
HTTPClient
协议,并讨论一些常见错误:由于
as!
导致的崩溃、在传输层里检查
statusCode
,以及在错误的层次上解码 JSON。
Please enable JavaScript to continue using this application.