This question already has answers here:
Returning data from async call in Swift function
                                
                                    (12个答案)
                                
                        
                                2年前关闭。
            
                    
嗨,我目前在Swift中从事Api Manager的工作,到目前为止,我得到了:

import Foundation
import CoreData
import Alamofire
import SwiftyJSON

class ApiManager {

    var data: NSArray = []

    func getApi() -> NSArray {

        let user:String = "user"
        let password:String = "password"

        Alamofire.request(.GET, "http://localhost/api/")
            .authenticate(user: user, password: password)
            .responseJSON{ (request, response, jsonData, error) in

                if let jsonData1 = jsonData {

                    if let jsonData2 = JSON(jsonData1).dictionaryObject {

                        self.data = jsonData2["data"] as! NSArray

                    }

                }

        }

        return data

    }

}


JSON Api是正确的,但是我的快速代码出了点问题,但是我不确定它是什么,

当我致电这位经理时:

let response = ApiManager().getApi()
println(response)


我只是得到空括号:

(
)


有人可以帮助我吗?

最佳答案

这是一个错误的设计。你不应该这样。您的getApi()方法应具有成功块,如果响应成功,则将执行该块。这是一种可能的解决方案:

static func getApi(success:( (data:NSArray) -> () )) {

    let user:String = "user"
    let password:String = "password"

    Alamofire.request(.GET, "http://localhost/api/")
        .authenticate(user: user, password: password)
        .responseJSON{ (request, response, jsonData, error) in

            if let jsonData1 = jsonData {

                if let jsonData2 = JSON(jsonData1).dictionaryObject {

                    success(jsonData2 as! NSArray)

                }

            }

    }

    return data

}


因此,如果要打印响应,则可以执行以下操作:

APIManager.getApi {
 println($0)
}

09-19 03:33