获取调用的 JSON 函数时复制数据

Posted

技术标签:

【中文标题】获取调用的 JSON 函数时复制数据【英文标题】:Duplicating data when fetching JSON function called 【发布时间】:2017-08-31 15:47:42 【问题描述】:

我的问题是我在ViewDidLoad() 上有函数getData(),当我切换到另一个视图并返回此视图时,它会再次加载与tableView 上的数据重复的数据。

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,
    

【问题讨论】:

视情况而定。怎么又叫了?您再次请求相同的数据,不是吗?所以避免再次调用它?还是您在寻找分页 API? @Larme 我在 ViewDidLoad() 上调用 getData() 所以我只在 ViewController 上调用一次。 为什么要重新加载页面?如果它已加载,并且您导航到另一个页面然后返回,您应该只获取 viewDidAppear - 您是否强制卸载视图作为导航的一部分?如果您需要卸载页面,则应在卸载过程中删除所有数据 - 如果保留表单数据有效,则不应删除表单... 【参考方案1】:

只需插入一行即可清空数组:

... 
  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) 

【讨论】:

感谢使用“self.items = jsonArray.map Items.fromJson(json: $0) ”

以上是关于获取调用的 JSON 函数时复制数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使javascript获取同步? [复制]

网络呼叫中的房间数据库中的非复制条目

c++,类的对象作为形参时一定会调用复制构造函数吗?

如何判断调用函数时引用了啥? [复制]

如何将 json 数据映射到 xml 以从 azure 函数 c# 调用 webservice

jQuery ajax 调用无法从 CakePHP 3.8 读取 json 编码数据(获取一个空数组)