簡體   English   中英

Alamofire 4請求返回NSArray,無法弄清楚如何在Swift 3中使用SwiftyJSON進行解析

[英]Alamofire 4 Request is returning NSArray, cannot figure out how to parse with SwiftyJSON in Swift 3

此Alamofire .POST請求的早期版本和SwiftyJSON解析在Swift 2.2和Xcode 7上都可以正常工作。更新到Swift 3.0,這需要安裝更新的Alamofire(4.0.0)和更新的SwiftyJSON。 經過一些語法調整后,所有內容現在都可以編譯了。

問題是我的Web應用程序現在似乎返回一個NSArray,而在代碼工作之前,幾乎相同的Request得到了一個由SwiftyJSON解析的NSData返回。 以下代碼顯示了請求:

   Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
   .responseJSON { (response:DataResponse<Any>) in

                    if let data = response.result.value as? Data {

永遠不會分配數據變量,因為響應類型不是NSData。 嘗試通過將最后一行更改為此類型來強制轉換為該類型:

    let data = response.result.value as! Data

該版本編譯良好,但是一旦觸發請求,您將收到錯誤:無法將類型'__NSArrayI'(0x105a37c08)的值強制轉換為'NSData'

請注意,該請求正在按預期返回數據。 在以前的Alamofire中,該數據為NSData,無需采取任何措施即可將其轉換。 由於從上述錯誤中可以看出,返回的數據已經是數組,因此Alamofire是否已對其進行了解析? 還是可以做一些使SwiftyJSON像以前一樣解析的事情?

編輯

由於返回的當前類型是NSArray,並且Web應用程序正在發送數組,因此似乎不再需要SwiftyJSON解析了嗎? 嘗試了以下代碼:

Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
.responseJSON { (response:DataResponse<Any>) in

let testdata = response.result.value as! NSArray
print(testdata[0])

在Xcode“所有輸出”屏幕中產生了以下輸出:

{
  1 = "08/01/16";
  2 = 285;
  3 = 160;
}

我不清楚這是否意味着testdata是一個數組數組,一個字典數組或一個未解析的字符串數組。 因此,除了回答“如何從該Alamofire請求中獲取NSData響應”問題之外,還可以回答“可以使用哪一行代碼(如果有)從整數中獲取整數值285”這一問題。上面顯示的NSArray測試數據?” 也可以解決問題。

如果您從此更改數據初始化行:

if let data = response.result.value as? Data {

對此:

let data = response.data

然后,該請求將導致NSData返回,可以像以前一樣由SwiftyJSON對其進行解析。 工作請求和解析代碼如下所示:

Alamofire.request("https://www.mywebappurl", method: .post, parameters: parameters)
.responseJSON { (response:DataResponse<Any>) in

let data = response.data
let jsonvalues = JSON(data: data!)

可能需要添加一些錯誤處理,但這與當前的問題無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM