2015-07-29 4 views
0

Привет я в настоящее время работает над Api менеджером в Swift, что я получил до сих пор:Json Апи-менеджер в Swift

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) 

Я просто пустые скобки:

(
) 

Кто-нибудь может мне помочь?

+0

Ваш запрос asynchrone. Таким образом, вы не можете вернуть данные таким образом. – Larme

+0

вы можете мне помочь с этим или нет? –

+0

Возможный дубликат [Как вернуть значение из Alamofire] (http://stackoverflow.com/questions/27390656/how-to-return-value-from-alamofire) – Larme

ответ

1

Это неисправный дизайн. Вы не должны делать это таким образом. Ваш метод 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) 
}