【发布时间】:2023-01-25 03:15:07
【问题描述】:
我试图了解为什么 Task{} 有效,但是当我使用 VStack{}.task{} 执行此操作时,我收到错误消息:
Invalid conversion from throwing function of type '@Sendable () async throws -> ()' to non-throwing function type '@Sendable () async -> Void'
我试图让 fetchWeather() 函数在视图启动时运行,而无需用户点击按钮。 (如果下面的方法是正确的方法)但是遇到了这个错误并且我真的很好奇这个错误背后的原因
下面是我的代码:
struct WeatherView: View {
var body: some View {
VStack{
Text("Hello, World!")
Button("Get Weather", action: {
// Works when I tap the button
// Task {
// try await fetchWeather()
// }
})
}
//*******Xcode error with invalid conversion*******
.task {
try await fetchWeather()
}
}
}
struct WeatherView_Previews: PreviewProvider {
static var previews: some View {
WeatherView( )
}
}
功能:
func fetchWeather () async throws {
let URLString = "https://api.openweathermap.org/data/2.5/weather?appid=someAPIKeyshere&q=seattle"
let (data, response) = try await URLSession.shared.data(from: URL(string: URLString)!)
guard let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200 else {
throw ResponseError.someError
}
let decodedResponse = try? JSONDecoder().decode(WeatherData.self, from: data)
print("This is in decodedResponse: \(decodedResponse)")
}
提前致谢!
【问题讨论】:
标签: swift swiftui async-await