Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-设计为只解析Json一次(当前为每个用户选择解析相同的数据)_Ios_Json_Swift - Fatal编程技术网

Ios Swift-设计为只解析Json一次(当前为每个用户选择解析相同的数据)

Ios Swift-设计为只解析Json一次(当前为每个用户选择解析相同的数据),ios,json,swift,Ios,Json,Swift,我正在学习IOS的快速开发,在我的简单项目中遇到了一个设计问题。我设置了一个pickerView,这样每当用户选择一个值时,就会显示来自Json的不同信息,并且工作正常 但是,在我当前的设计中,每当用户从pickerview中选择一个新值时,数据都会再次被解析/获取,我想做的是收集一次数据,然后根据用户的选择循环使用相同的数据。我的猜测是,我需要将加载数据的函数与实际执行循环和填充标签的函数/代码分开。但是我似乎找不到任何方法来解决这个问题,当我试图从loadData函数返回一些东西时,我发现函

我正在学习IOS的快速开发,在我的简单项目中遇到了一个设计问题。我设置了一个pickerView,这样每当用户选择一个值时,就会显示来自Json的不同信息,并且工作正常

但是,在我当前的设计中,每当用户从pickerview中选择一个新值时,数据都会再次被解析/获取,我想做的是收集一次数据,然后根据用户的选择循环使用相同的数据。我的猜测是,我需要将加载数据的函数与实际执行循环和填充标签的函数/代码分开。但是我似乎找不到任何方法来解决这个问题,当我试图从loadData函数返回一些东西时,我发现函数中的闭包语句中已经使用的返回有问题

func loadData() {
    let jsonUrlString = "Here I have my Json URL"
    guard let url = URL(string: jsonUrlString) else
    { return }
    URLSession.shared.dataTask(with: url) { (data, response, err) in
        guard let data = data else { return }
        do { let myPlayerInfos = try
            JSONDecoder().decode(Stats.self, from: data)
            DispatchQueue.main.async {
                for item in myPlayerInfos.elements! {
                    if item.web_name == self.selectedName{
                        self.nameLabel.text = "Name:\t \t \(item.first_name!) \(item.second_name!)"     
                    } else {}
                }
            }  
        } catch let jsonErr {
            print("Error serializing json:", jsonErr)
        }
    }.resume()
}//end function loaddata
希望你们能理解我的问题

selectedName变量等于用户从pickerView中选择的值。 函数loadData在pickerView“didselectrow”函数中运行

func loadData() {
    let jsonUrlString = "Here I have my Json URL"
    guard let url = URL(string: jsonUrlString) else
    { return }
    URLSession.shared.dataTask(with: url) { (data, response, err) in
        guard let data = data else { return }
        do { let myPlayerInfos = try
            JSONDecoder().decode(Stats.self, from: data)
            DispatchQueue.main.async {
                for item in myPlayerInfos.elements! {
                    if item.web_name == self.selectedName{
                        self.nameLabel.text = "Name:\t \t \(item.first_name!) \(item.second_name!)"     
                    } else {}
                }
            }  
        } catch let jsonErr {
            print("Error serializing json:", jsonErr)
        }
    }.resume()
}//end function loaddata
作为参考,Stats结构:

struct Stats: Decodable {
    let phases: [playerPhases]?
    let elements: [playerElements]?
}

struct playerPhases: Decodable{
    let id: Int?
}

struct playerElements: Decodable {
    let id: Int?
    let photo: String?
    let first_name: String?
    let second_name: String?  
}