获取JSON函数时复制数据称为
问题描述:
我的问题是我有ViewDidLoad()
上的函数getData()
,当我切换到另一个视图并返回到此视图时,它再次加载在tableView上复制我的数据的数据。获取JSON函数时复制数据称为
var items = [Items]()
func getData() {
Alamofire.request(url, method: .get).validate().responseJSON { response in
self.obj.helper.checkConnectivity()
switch response.result {
case .success(let value):
let json = JSON(value)
let jsonArray = json[].arrayValue
for json in jsonArray {
let item = Items.fromJson(json: json)
self.items.append(item)
}
case .failure(let error):
print(error)
}
self.tableView.reloadData()
}
}
struct Items {
var id: Int
var name: String
static func fromJson(json: JSON) -> Items {
return Items(
id: json["id"].intValue,
name: json["name"].stringValue,
}
}
答
只需插入线以清除数组:
...
let jsonArray = json[].arrayValue
self.items.removeAll()
for json in jsonArray {
...
或更换
for json in jsonArray {
let item = Items.fromJson(json: json)
self.items.append(item)
}
与
self.items = jsonArray.map { Items.fromJson(json: $0) }
+0
感谢您使用“self.items = jsonArray.map {Items.fromJson(json:$ 0)}“ –
这取决于。你为什么再次打电话?你再次请求相同的数据,不是吗?所以避免再次调用它?或者你正在寻找分页API? – Larme
@Larme我在ViewDidLoad()上调用getData(),所以我只是在ViewController上调用它。 –
你为什么要重新加载页面?如果它被加载,并且你导航到另一个页面然后返回,你应该只是得到viewDidAppear - 你是否强制卸载视图作为导航的一部分?如果你需要卸载页面,你应该删除所有的数据作为卸载的一部分 - 如果它是有效的保持表单数据,你不应该删除表单... – Russell