You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:06:03