2017-02-01 15 views
0

我正在使用JSON與Moya學習Swift中的業餘愛好項目iOS應用程序。以下是我的VC代碼的樣子:無法爲預先聲明的數組分配JSON響應

import UIKit 
import Moya 
import Moya_ModelMapper 

class SQSquirrelListViewController: UIViewController { 

    @IBOutlet weak var tableView: UITableView! 

    var squirrels: [Squirrel] = [] 

    override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.fetchData() 
    } 


    override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 
    } 

    func fetchData() { 
    let provider = MoyaProvider<SQService>() 
    provider.request(.squirrelsIndex(page: "1")) { result in 
     switch result { 
     case let .success(moyaResponse): 
     do { 
      let sq = try moyaResponse.mapObject() as Squirrels 
      self.squirrels = sq.items 
     } catch { 
      print(error.localizedDescription) 
     } 
     let statusCode = moyaResponse.statusCode 
     print("STATUS CODE: \(statusCode)") 
     case let .failure(error): 
     print(error.localizedDescription) 
     } 
    } 
    tableView.reloadData() 
    } 
} 

啓動應用程序後,squirrels數組爲空。我不確定它是否與Moya有關,還是它是View Controller流程中的缺陷?

+0

什麼東西印在控制檯上? – hybridcattt

+0

@hybridcattt只有狀態碼,如在fetchData()中的print語句中。在我嘗試在表視圖的數據源方法中使用squirrels [indexPath.row]時,調試器中的數組是空的,並且還會引發「數組索引超出範圍」。 – michalronin

+0

嘗試在'self.squirrels = sq.items'中放置一個斷點並查看'sq'中的內容。還打印'嘗試moyaResponse.mapObject()' - 這很可能是空的。 – hybridcattt

回答

2

重新加載表視圖的行必須是裏面的完成處理程序。