无法将 JSON 响应分配给预先声明的数组
Posted
技术标签:
【中文标题】无法将 JSON 响应分配给预先声明的数组【英文标题】:Cannot assign JSON response to a pre-declared array 【发布时间】:2017-02-01 15:57:37 【问题描述】:我正在使用 Swift 开发一个爱好项目 ios 应用程序,以学习在 Moya 中使用 JSON。这是我的 VC 代码的样子:
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 流程中的缺陷?
【问题讨论】:
控制台中是否打印了任何内容? @hybridcattt 只有状态码,如 fetchData() 中的 print 语句。调试器中的数组为空,当我尝试在表视图的数据源方法中使用 squirrels[indexPath.row] 时,也会抛出“数组索引越界”。 尝试在self.squirrels = sq.items
中设置一个断点,看看sq
中的内容。同时打印try moyaResponse.mapObject()
- 这很可能是空的。
@hybridcattt 打印 self.squirrels
返回正确的值。问题出在@vadian 指出的问题上——在完成处理程序中移动self.tableView.reloadData()
解决了这个问题。
@vadian - 请回复,以便我接受您的回答。感谢你们的参与和帮助我学习。
【参考方案1】:
重新加载表格视图的行必须在完成处理程序中。
【讨论】:
以上是关于无法将 JSON 响应分配给预先声明的数组的主要内容,如果未能解决你的问题,请参考以下文章
如何将从webapi返回的自定义对象数组的HttpResponse响应分配给打字稿角度中相同数组类型的对象?