非同期/待機 | 迅速

Mar 04 2023
非同期/待機。
非同期/待機 | 迅速

非同期/待機

  • asyncキーワードは、関数を非同期として定義するために使用されます。
  • 非同期関数はTaskオブジェクトを返します。
  • Taskオブジェクトは、エラーのキャンセル、待機、または処理に使用できます。
  • これにより、完了ハンドラー (クロージャ) を必要とせずに、より同期的なスタイルで非同期コードを作成できます。
  • async /await は、 URLSession、DispatchQueue などの非同期 API で使用できます。
  • import UIKit
    import Foundation
    
    // Codable is a typealias that conforms Decodable & Encodable protocols
    struct Post: Codable {
        let userId: Int
        let id: Int
        let title: String
        let body: String
    }
    
    // Fetch posts
    func fetchPosts() async throws -> [Post] {
        guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else { return [] }
        
        let (data, _) = try await URLSession.shared.data(from: url)
        let decoder = JSONDecoder()
        return try decoder.decode([Post].self, from: data)54
    }
    
    // Request posts
    func requestPosts() {
        Task {
            let posts = try await fetchPosts()
            print("Posts count:", posts.count)
        }
    }
    
    requestPosts() // Output: Posts count: 100