我正在为IOS学习Swift开发,并在我的简单项目中遇到了设计问题。我有一个pickerView设置,以便每次用户选择一个值,显示来自Json的不同信息,它工作得很好。
然而,在我目前的设计中,每当用户从pickerview中选择一个新值时,数据就会被再次解析/获取,我想要做的是收集数据一次然后根据用户循环遍历相同的数据选择。我的猜测是我需要将函数分开来加载数据和函数/代码来实际循环并填充标签。但我似乎找不到任何方法来解决它,当我尝试从我的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?
}