2015-06-20 54 views
0

我已經安裝Alamofire和SwiftyJSON與Cocoapods。獨立的,每個人都很好。但是,當我嘗試混合這兩個我得到一個錯誤。Alamofire和SwiftyJSON錯誤

在使用Alamofire之前,我使用NSURLConnection來下載數據。當connectionHandler完成時,我使用SwiftyJSON創建了一個JSON對象。

 let json = JSON(data: self.downloadedData!) 

這工作沒有任何問題。

爲了讓事情更清潔,我想使用Alamofire。當我使用Alamofire時,我嘗試使用SwiftyJSON創建JSON對象。

Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON() 
      { 
       (_, _, JSON, _) in 

       let json = JSON(data: JSON) 
     } 

當我這樣做時,我得到以下錯誤。

不能調用 'JSON' 類型 '(數據? AnyObject)' 的參數列表

由於JSON需要一個NSData參數我嘗試以下。

Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON() 
      { 
       (_, _, JSON, _) in 

       let json = JSON(data: JSON as! NSData) 
     } 

這給了我以下錯誤。

不能調用 'JSON' 類型 '(數據:NSData的)' 的參數列表

我難倒。有什麼想法嗎?

回答

1

您必須使用dataUsingEncoding對結果進行編碼。嘗試使用下面的代碼到你的轉換結果:

Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseJSON() 
    { 
     (_, _, responseBody, _) in 
     // Convert the response to NSData to handle with SwiftyJSON 
     if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) { 
      let json = JSON(data: data) 
      println(json) 
     } 
    } 
+0

感謝您的答覆的版本。這行如果讓data =(responseBody as!NSString).dataUsingEncoding(NSUTF8StringEncoding)稱爲以下錯誤。無法將'__NSCFDictionary'(0x10611ca60)類型的值轉換爲'NSString'(0x1065ac8e0)。 – jonthornham

0

lcaro的回答給我發了正確的方向,但我不得不做出一些改變。下面的代碼是lcaro的答案。

Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseJSON() 
    { 
     (_, _, responseBody, _) in 
     // Convert the response to NSData to handle with SwiftyJSON 
     if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) { 
      let json = JSON(data: data) 
      println(json) 
     } 
    } 

我將responseJON()更改爲responseString(),然後刪除了對ResponseBody的NSString類型。

Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseString() 
    { 
     (_, _, responseBody, _) in 
     // Convert the response to NSData to handle with SwiftyJSON 
     if let data = (responseBody).dataUsingEncoding(NSUTF8StringEncoding) { 
      let json = JSON(data: data) 
      println(json) 
     } 
    } 
2

嘿,我同時使用Alamofire和SwiftyJSON在這裏得到圖像詞典的URL我的代碼看起來

var Photos = [String]() 
override func viewDidLoad() { 
    super.viewDidLoad() 
     Alamofire.request(.GET, "https://api.500px.com/v1/photos",parameters:["consumer_key":"gRU4LletUCA9RiOQhaJBAt62UyRRYUE6vsIcC7fO"]) 
     .responseJSON { _,_,result in 
      switch result { 
      case .Success(let data): 
       let json = JSON(data) 
       self.Photos = self.ParseJSON(json) 
      case .Failure(_, let error): 
       print("Request failed with error: \(error)") 
      } 
      debugPrint(self.Photos) 
    } 

基本上是什麼做的是發出請求,如果它是succesfull我將數據保存到一個JSON對象,然後我就在解析數組中IMAGE_URL稱爲照片

這裏我ParseJSON樂趣

func ParseJSON(json:JSON)->[String] 
{ 
    //Get Image_URL 
    var pictures = [String]() 
    for result in json["photos"].arrayValue{ 
     pictures.append(result["image_url"].stringValue) 
    } 
    return pictures 
} 

我目前使用 Almaofire 2.1 和最近SwiftyJSON