Skip to main content

Swift API Manager -Alamofire-Refresh Token-With TestCases

  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 in Swift with code examples

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

Async await


Completion callbacks were common in Swift to return from an asynchronous task,

Exp:-

func fetchImages(completion: (Result<[UIImage], Error>) -> Void) {
    // .. perform data request
}

What Is Async

Async stand for asynchronous 

func fetchImages() async throws -> [UIImage] {
 // .. 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