如何在Swift中的框架内创建委托/回调?

问题描述 投票:0回答:2

我一直在实施登录框架以用于应用程序开发。我已经创建了登录框架功能,并且工作正常。

现在,我正在尝试从应用程序到框架明智地从应用程序到框架对返回响应的回调,无论是成功还是失败。

这是我的框架代码:

   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)
        }
    }

  }

这里是我使用myframework的sampleapp:

    override func viewDidLoad() {
    super.viewDidLoad()

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

}//viewdidload
ios swift callback delegates ios-frameworks
2个回答
0
投票

您可以使用回调实现

//框架代码

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代码

 override func viewDidLoad() {

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

}

//注意:根据您的要求创建completionHandler,它是一个演示completionHandler


0
投票

首先,您必须定义完成处理程序,然后您可以在函数参数中使用它。我建议您检查完成情况以轻松实现。

typealias DownloadComplete =()->()

public func loginApiCall(用户名:String ?,密码:String ?,已完成:@转义DownloadComplete)){令参数= [“用户名”:用户名,“密码”:密码]打印(参数)

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

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.