Swift 游乐场 async/await "cannot find 'async' in scope"
Swift Playground with async/await "cannot find 'async' in scope"
我正在尝试 运行 在 Xcode Playground 上使用这个异步函数:
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
enum NetworkingError: Error {
case invalidServerResponse
case invalidCharacterSet
}
func getJson() async throws -> String {
let url = URL(string:"https://jsonplaceholder.typicode.com/todos/1")!
let (data, response) = try await URLSession.shared.data(from: url)
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw NetworkingError.invalidServerResponse
}
guard let result = String(data: data, encoding: .utf8) else {
throw NetworkingError.invalidCharacterSet
}
return result
}
let result = try! await getJson()
print(result)
我收到此错误消息:
error: ForecastPlayground.playground:27:25: error: 'async' call in a function that does not support concurrency
let result = try! await getJson()
^
所以我尝试在我的函数调用中创建异步块:
async{
let result = try! await getJson()
print(result)
}
然后我收到了这条错误信息:
Playground execution failed:
error: ForecastPlayground.playground:27:1: error: cannot find 'async' in scope
async{
^~~~~
我试图用新的@MainActor 属性注释我的函数,但它不起作用。
我做错了什么?
添加对 _Concurrency
的导入(下划线,因为这应该默认包含)或使用该库的库,例如 UIKit
或 SwiftUI
。
Swift Playgrounds 目前似乎无法访问所有并发功能,例如 async let
.
总结
import _Concurrency
对于 Xcode 13,要在 Playground 中使用 async
和 await
,只需导入 Foundation 并将代码包装在一个分离的任务中。
import Foundation
Task.detached {
func borat() async -> String {
await Task.sleep(1_000_000_000)
return "great success"
}
await print(borat())
}
这是因为您的代码只有 3 个地方可以调用异步函数:(1) 在异步函数的主体中或 属性; (2) 在标有@main
的class、结构或枚举的静态main()
方法中; (3) 在分离的子任务中。
我正在尝试 运行 在 Xcode Playground 上使用这个异步函数:
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
enum NetworkingError: Error {
case invalidServerResponse
case invalidCharacterSet
}
func getJson() async throws -> String {
let url = URL(string:"https://jsonplaceholder.typicode.com/todos/1")!
let (data, response) = try await URLSession.shared.data(from: url)
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw NetworkingError.invalidServerResponse
}
guard let result = String(data: data, encoding: .utf8) else {
throw NetworkingError.invalidCharacterSet
}
return result
}
let result = try! await getJson()
print(result)
我收到此错误消息:
error: ForecastPlayground.playground:27:25: error: 'async' call in a function that does not support concurrency
let result = try! await getJson()
^
所以我尝试在我的函数调用中创建异步块:
async{
let result = try! await getJson()
print(result)
}
然后我收到了这条错误信息:
Playground execution failed:
error: ForecastPlayground.playground:27:1: error: cannot find 'async' in scope
async{
^~~~~
我试图用新的@MainActor 属性注释我的函数,但它不起作用。
我做错了什么?
添加对 _Concurrency
的导入(下划线,因为这应该默认包含)或使用该库的库,例如 UIKit
或 SwiftUI
。
Swift Playgrounds 目前似乎无法访问所有并发功能,例如 async let
.
总结
import _Concurrency
对于 Xcode 13,要在 Playground 中使用 async
和 await
,只需导入 Foundation 并将代码包装在一个分离的任务中。
import Foundation
Task.detached {
func borat() async -> String {
await Task.sleep(1_000_000_000)
return "great success"
}
await print(borat())
}
这是因为您的代码只有 3 个地方可以调用异步函数:(1) 在异步函数的主体中或 属性; (2) 在标有@main
的class、结构或枚举的静态main()
方法中; (3) 在分离的子任务中。