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...

Delegate Example in swift

 Add Two Number With Simple Delegate - Swift delegate protocol is with simple examples to understand the delegate pattern using protocols in swift.

        

        import UIKit

        import PlaygroundSupport

         

        PlaygroundPage.current.needsIndefiniteExecution = true



        class Developer {

            var manager: Manager?

            func developerWillAddTwoNumbers(a: Int, b: Int){

                let result = a + b

                manager?.addTwoNumber(result: result)

            }

        }


        class Manager {

            var developer: Developer?

            

            init (_develoepr: Developer){

                self.developer = _develoepr

                developer?.manager = self

            }

            

            func addTwoNumber(result: Int){

                print("Result: === \(result)")

            }

            

            func add(x: Int, y: Int){

                developer?.developerWillAddTwoNumbers(a: x, b: y)

            }

        }


        let objManager = Manager(_develoepr: Developer())

        objManager.add(x: 10, y: 5)



Download Image With Delegate  & protocol

        import UIKit

        import PlaygroundSupport


        PlaygroundPage.current.needsIndefiniteExecution = true



        struct Images {

        static let imageUrl = "https://www.easemytrip.com/images/offer-img/EMTFirst_hp.png"

        }


        protocol ImageDownloadDlegate : AnyObject {

            

        func didFinishedDownloadImage(result: Data?)

            

        }


        class ImageDownloader {

            

           weak var imageDownloadDlegate: ImageDownloadDlegate?

            

            func downloadImageServer(url: URL){

                URLSession.shared.dataTask(with: url) { imageData, response, error in

                    self.imageDownloadDlegate?.didFinishedDownloadImage(result: imageData)

                }.resume()

            }

        }


        class ImageViewer: ImageDownloadDlegate {

            var imageDownloader: ImageDownloader?

            

            init(_imageDownloader: ImageDownloader){

                self.imageDownloader = _imageDownloader

                imageDownloader?.imageDownloadDlegate = self

                imageDownloader?.downloadImageServer(url: URL(string: Images.imageUrl)!)

            }

            

            func didFinishedDownloadImage(result: Data?) {

                let image = UIImage(data: result!)

            }

            

        }


        let objImageViewer = ImageViewer(_imageDownloader: ImageDownloader())










Comments