import Foundation import KeychainAccess enum APIError : Error { case accessTokenExpired case networkError // Add more error cases as needed } class APIManager { private let keychain = Keychain (service: "com.example.app.refreshToken" ) private let refreshTokenKey = "refreshToken" private var accessToken: String ? func callAPI < T : Codable >( urlString : String , method : String , parameters : [ String : Any ] ? , completion : @escaping ( Result < T , APIError >) -> Void ) { guard let url = URL (string: urlString) else { completion(.failure(.networkError)) return } var request = URLRequest (url: url) request.httpMethod = method // Add access token to the request headers if available if let token = accessToken { request.setValue( "Bearer \(token) " , forHTTPHeaderField: "Aut...
Async await
Async await is a new structured concurrency change that arrived in swift 5.5 during WWDC 2021. Concurrency in swift allowing multiple pices of code run at the same time. With the new async methods and await statement, we can define methods performing work asynchronously. Async replaces closure completion callbacks
Completion callbacks were common in Swift to return from an asynchronous task,
Exp:-
func fetchImages(completion: (Result<[UIImage], Error>) -> Void) {
// .. perform data request
}
// .. perform data request
}
What Is Async
Async stand for asynchronous
func fetchImages() async throws -> [UIImage] {
// .. perform data request
}
// .. perform data request
}
This async method throw async which means that it’s performing a failable asynchronous task.
The method would return a collection of images if everything went well otherwise throws an error if something went wrong.
What is await?
Await is the keyword to be used for calling Async method. You can say Async & Await both are best friends in swift as one will never go without the other. "Await is waiting a callback from his buddy async" if call a fetchImages() method then
do {
let images = try await fetchImages()
print("Fetched \(images.count) images.")
} catch {
print("Fetching images failed with error \(error)")
}
Async- await called a structured concurrency, this method are linearly executed without going back.
Comments
Post a Comment