2017-07-12 72 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檢查.. –