Xcode 15.3 iOS Playground中Async/Await执行异常原因及修复
Xcode 15.3 Playground异步代码执行错误原因与修复方案
错误原因
Xcode Playground的默认执行逻辑会在主线程任务结束后终止运行,但你的代码使用了异步await调用。尽管异步任务已完成并输出结果,但Playground未检测到明确的持续运行标记,误以为执行意外中断,因此抛出该错误。本质是Playground对异步代码的执行生命周期处理逻辑和常规iOS项目不同。
修复方法
只需在代码开头添加一行标记,告知Playground保持运行状态直到手动结束,修改后的代码如下:
import Foundation import PlaygroundSupport // 让Playground持续运行,直到主动结束 PlaygroundPage.current.needsIndefiniteExecution = true func fetchWeatherHistory() async -> [Double] { (1...100).map { _ in Double.random(in: -10...30) } } func calculateAverageTemperature(for records: [Double]) async -> Double { let total = records.reduce(0, +) let average = total / Double(records.count) return average } func upload(result: Double) async -> String { "OKet" } func processWeather() async throws { let records = await fetchWeatherHistory() let average = await calculateAverageTemperature(for: records) let response = await upload(result: average) print("Server response: \(response)") // 异步任务完成后主动终止Playground PlaygroundPage.current.finishExecution() } do { try await processWeather() } catch let error { print(error.localizedDescription) PlaygroundPage.current.finishExecution() }
注:代码中把无需重新赋值的var改为let是规范优化操作,并非修复错误的必要步骤。
内容的提问来源于stack exchange,提问作者The Outstanding Question Asker
相关产品推荐
相关产品推荐

