示例JSON格式:
[
{
"city": "Tokyo",
"admin": "T\u014dky\u014d",
"country": "Japan",
"population_proper": "8336599",
"iso2": "JP",
"capital": "primary",
"lat": "35.685",
"lng": "139.751389",
"population": "35676000"
},
{
"city": "\u014csaka",
"admin": "\u014csaka",
"country": "Japan",
"population_proper": "2592413",
"iso2": "JP",
"capital": "admin",
"lat": "34.683333",
"lng": "135.516667",
"population": "11294000"
}
]
试着让标题出现在山顶上,但没有成功。
struct JapCity: Codable {
var city: String
var admin: String
var country: String
var population: String
var lat: String
var lng: String
}
var japcityinfo = [JapCity]()
@IBOutlet weak var cityPicker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
cityPicker.delegate = self
cityPicker.dataSource = self
jasonCall()
cityPicker.reloadAllComponents()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return japcityinfo.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
print("here")
return japcityinfo[row].city
}
func jasonCall() {
let decoder = JSONDecoder()
do {
//let jsonData = Data(jsonString.utf8)
let path = Bundle.main.path(forResource: "jp", ofType: "json")
guard path != nil else {
print("Error: Can't find JSON file")
return
}
let url = URL(fileURLWithPath: path!)
let data = try Data(contentsOf: url)
let japancity = try decoder.decode([JapCity].self, from: data)
print(japancity)
print(japancity.count)
let citydataNum = japancity.count
print(citydataNum)
} catch {
print(error.localizedDescription)
}
}
}
有人能帮忙吗?
发布于 2020-10-31 04:46:09
您必须在解析json文件中的数据后填充japcityinfo
数组,然后重新加载cityPicker
以使它们得到反映。
在打印语句之后添加以下两行:
self.japcityinfo = japancity
self.cityPicker.reloadAllComponents()
因此,您的jasonCall
函数将如下所示:
func jasonCall() {
let decoder = JSONDecoder()
do {
//let jsonData = Data(jsonString.utf8)
let path = Bundle.main.path(forResource: "jp", ofType: "json")
guard path != nil else {
print("Error: Can't find JSON file")
return
}
let url = URL(fileURLWithPath: path!)
let data = try Data(contentsOf: url)
let japancity = try decoder.decode([JapCity].self, from: data)
print(japancity)
print(japancity.count)
let citydataNum = japancity.count
print(citydataNum)
self.japcityinfo = japancity
self.cityPicker.reloadAllComponents()
} catch {
print(error.localizedDescription)
}
}
https://stackoverflow.com/questions/64618316
复制相似问题