我正在嘗試使用 Swift 5.5 中的 async / await 進行異步網路呼叫,但由于某種原因,它在我的 Swift 包中無法按預期作業。
let (data, response) = await URLSession.shared.data(for: request)
上面的代碼行在 swift 操場上作業(這里的請求是一個 URLRequest),但它在我的 Swift 包中無法作業(使用 Swift 工具 5.5 版)
起初的錯誤是:Type of expression is ambiguous without more context但我意識到它與元組分配有關,所以我將陳述句更改為:
let data = await URLSession.shared.data(for: request)
它給了我錯誤: Value of type 'URLSession' has no member 'data'
此外,在 Swift 包中作業時,Xcode 的代碼完成不會列出 .data(for:),而不是在操場上。檢查下面的螢屏截圖以獲得更好的理解。
Swift 包 游樂場
uj5u.com熱心網友回復:
我很驚訝你沒有看到錯誤
expression is 'async' but is not marked with 'await'
函式 call URLSession.shared.data(for: request),因為它是async,應該回傳一個異步延續而不是一個(Data,URLResponse)元組。
你有兩種處理方式。您可以立即await按照評論中的建議進行回復:
let (data, response) = await URLSession.shared.data(for: request)
或者你可以async let用來捕獲延續,然后你可以稍后等待它:
async let requestTask = URLSession.shared.data(for: request)
print("Doing some other stuff")
let (data, response) = try await requestTask
uj5u.com熱心網友回復:
我已經做了足夠的研究并得出結論,一個 Swift 包(通用構建)需要 macOS 12.0 SDK for Swift Concurrency,而當前的 Xcode 13 版本沒有它。它僅在測驗版中,所以我必須使用最新的測驗版或等到 Apple 宣布支持 macOS 12 SDK 的 Xcode 版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322512.html
