Search code examples
iosswiftcallbackdelegatesios-frameworks

How to create delegate/callback inside framework in Swift?


I have been implementing login framework to use in app development. I have created login framework functionality and it works fine.

Now i'm trying to do callback of return response of whether it success or failed from app to framework wise versa framework to app.

here is my framework code:

   public func loginApiCall(username: String?, password: String?) {


    let parameters = [
        "username": username,
        "password": password
        ]
    print(parameters)

    let url = "apiUrl/authentication/"
    Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
        response in
        switch (response.result) {
        case .success:
            print(response)
            break
        case .failure:
            print(Error.self)
        }
    }

  }

Here is my sampleapp where i have using myframework:

    override func viewDidLoad() {
    super.viewDidLoad()

    //framework called here...
    let apiCall = APICall.init()
    apiCall.loginApiCall(username: "demo", password: "demo")

}//viewdidload

Solution

  • you can achieve using callback

    // framework code

    public func loginApiCall(username: String?, password: String?, callback : @escaping ((Bool) -> Void)) {
    
        let parameters = [
            "username": username,
            "password": password
        ]
        print(parameters)
    
        let url = "apiUrl/authentication/"
        Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [:]).responseJSON {
            response in
            switch (response.result) {
            case .success:
                callback(true)
            case .failure:
                callback(false)
            }
        }
    
    }
    

    // viewDidLoad code

     override func viewDidLoad() {
    
    super.viewDidLoad()
    //framework called here...
    let apiCall = APICall.init()
        apiCall.loginApiCall(username: "demo", password: "demo") { (status) in
            print("code")
        }
    
    }
    

    //NOTE : create completionHandler as per your requirement, it is a demo completionHandler