在 swift 中向 class 函数添加回调

Adding a callback to a class function in swift

在我的项目中,我创建了一个 public class 来处理我的数据请求(JSON、图像等)的网络接口。 class 中的函数使用 Alamofire 建立网络连接并下载 JSON 文件。

class和函数如下:

import Foundation
import Alamofire

public class DataConnectionManager {

    public class func getJSON(AppModule:String, callback:(Int) -> Void) -> Void {

        switch(AppModule) {

        case "Newsfeed":
            Alamofire.request(.GET, "http://some-site.com/api/", encoding: .JSON).responseJSON { (_, _, JSONData, _) in
                if JSONData != nil {
                    jsonHolder.jsonData = JSONData!
                    print("start")
                    callback(1)
                }
                else {
                    callback(0)
                }
            }
            break

        default:
            break

        }

    }

}

我在我的项目中调用函数如下所示:

DataConnectionManager.getJSON("Newsfeed", callback: { (intCheck : Int) -> Void in
    if intCheck == 1 {
        println("Success")
    }
    else {
        println("Failure")
    }  
})

该应用程序将无任何错误地启动,但我的健全性检查没有打印出来。事实上,当我这样做时,Alamofire.request 也不会抓取 JSON 提要。

我的方向是否正确?

我让这个工作了,但我不确定具体如何工作。我根据用户建议(添加错误检查等)更改了一些内容,它神奇地开始工作了。这是我更新后的代码,因此人们可以看到如何向他们的函数添加回调。

我的"ConnectionManager":

import Foundation
import Alamofire

public class DataConnectionManager {

    public class func getJSON(AppModule:String, callback:(Int) -> Void) -> Void {

        switch(AppModule) {

        case "Newsfeed":
            Alamofire.request(.GET, "http://some-site.com/api/", encoding: .JSON).responseJSON { (_, _, alamoResponse, error) in
                if (error != nil){
                    println("You've got a response error!")
                    callback(0)
                }
                else {
                    if alamoResponse != nil {
                        jsonHolder.jsonData = alamoResponse!
                        callback(1)
                    }
                    else {
                        println("You've got some random error")
                        callback(0)
                    }
                }
            }
            break

        default:
            break

        }

    }

}

我对函数的调用:

DataConnectionManager.getJSON("Newsfeed", callback: { (intCheck : Int) -> Void in
    if intCheck == 1 {
        self.createTable()
    }
    else {
        println("Failure")
    } 
})

我正在使用 swift 2.0 + SwiftyJSON,这是我实现它的代码:

 class func getJSON(AppModule:String, urlToRequest: String, resultJSON:(JSON) -> Void) -> Void {
    var returnResult: JSON = JSON.nullJSON

    switch(AppModule) {
    case "all":
        request(.GET, urlToRequest)
            .responseJSON { (_, _, result) in
            if (result.isFailure){
                print("You've got a response error!")
                resultJSON(nil)
            }
            else {
                if (JSON(result.value!) != nil) {
                    returnResult = JSON(result.value!)
                    resultJSON(returnResult)
                }
                else {
                    print("You've got some random error")
                }
            }
        }
        break

    default:
        break

    }

}

并像这样调用函数:

    DataManager.getJSON("all",urlToRequest: "myurl.com", resultJSON: { (result: JSON) -> Void in
        if (result == nil){
            // error with result json == nil
            return
        }else{
            //do something with json result
        }
    })

希望这对您有所帮助。