Wie behebe ich das? Ich möchte Task.scribed anstelle von Task verwenden, weil ich herausgefunden habe, dass die Verwendung von Task in einer mit @Observable markierten Klasse aus einer SwiftUI-Ansicht immer im Hauptthread ausgeführt wird, ich aber möchte, dass die JSON-Dekodierung in einem Hintergrundthread erfolgt.
Code: Select all
struct Post: Identifiable, Decodable {
let id: Int
let title: String
let body: String
}
@Observable
class PostViewModel {
var post: Post?
func fetchPost() {
guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts/1") else {
return
}
Task.detached { [weak self] in
guard let self else { return }
do {
let (data, _) = try await URLSession.shared.data(from: url)
let decoded = try JSONDecoder().decode(Post.self, from: data)
Task { @MainActor [weak self] in
self?.post = decoded
}
} catch {
print("Failed to load: \(error.localizedDescription)")
}
}
}
}
Mobile version