2017-07-12 41 views
0

我想创建包含我所有请求的AlamofireWebService管理器,并且只在我的viewControllers中使用此类的类函数并在viewController中使用响应。
例如像这样的的viewController:
Alamofire Web服务管理器在viewController中返回nil

let cardResponse : String? 
cardResponse = WebServiceManager.shared.getCardTitle() 

我搜查,发现我应该用我的功能逃逸completionHandler,我写了这个:

import Foundation 
import Alamofire 
import SwiftyJSON 

class WebServiceManager { 

    static let shared : WebServiceManager = WebServiceManager() 

    let apiEndPoint = "My URL" 

    func getCardTitle(completionHandler: @escaping (NSDictionary?, Error?) ->()) { 
     Alamofire.request("\(apiEndPoint)") 
      .responseJSON { response in 
       switch response.result { 
       case .success(let value): 
         print("from .success \(value)") 
         completionHandler(value as? NSDictionary, nil) 
       case .failure(let error): 
         completionHandler(nil, error) 
       } 
     } 

    } 
} 

在成功的情况下打印工作正常但在viewController它只是打印零。

我的viewController:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    WebServiceManager.shared.getCardTitle() { responseObject, error in 
     // use responseObject and error here 

     print("responseObject = \(responseObject); error = \(error)") 
     return 
    } 

} 

我应该怎么做的viewController打印打印我的反应?

回答

0

这意味着你的价值不能被转换为NSDictionary中有另一种类型。

completionHandler(value as? NSDictionary, nil) 

请经理试试我查了“伪代码”

if let dic = value as? [String: Any] { 
    debugPrint("Dic \(dic)") 
} else if let str = value as? String { 
    debugPrint("String \(str)") 
} else if let data = value as? Data, let str = String(data: data, encoding: .utf8) { 
    debugPrint("UTF8 String \(str)") 
} 
+0

是的,这是一个阵列非常感谢你 – arash

0

只是检查响应零

 Alamofire.request("URL", method: .post).responseJSON{(responseData) -> Void in 
     if((responseData.result.value != nil)){ 
      let jsonData = JSON(responseData.result.value) 

      if let arrJSON = jsonData["keyNodes"].arrayObject { 

       for index in 0...arrJSON.count-1 { 
        let aObject = arrJSON[index] as! [String : AnyObject] 
        var sl:String; 
        if let sl1 = aObject["sl"] as? String { 
         sl = sl1; 
        } 
       } 
      } 

     } 
    } 
+0

这正如我所说的成功案例 – arash

+0

我认为你是在谈论你已经找到了从服务器和JSON响应 响应打印响应键是零。正确 –

+0

我已更新。 Plz检查.. –