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