2017-07-12 2 views
0

私のすべてのリクエストを含むAlamofireWebServiceマネージャを作成したいと思います。このクラスのクラス関数をviewControllerで使用し、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では、単にnilを出力します。

私の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

nilの応答を確認してください。

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

ちょうどそれはあなたの価値は、それが別の型を持っているNSDictionaryのためにキャストすることができないことを意味

 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からの応答を発見したことを確認応答キーはnilです。右 –

+0

私は更新しました。 Plzチェック.. –

関連する問題