ios - 如何从 JSON 中获取特定值并在 CollectionView 上显示它的元素?
问题描述
是否可以从 JSON 中获取特定元素并在 collectionView 上显示它的其他元素?
更广泛的问题: 这是我的 JSON 对象:
{
"id": 1,
"floor": 1,
"full_name": "Ernst & Young Audit LLC",
"description": "Ernst & Young («Эрнст энд Янг», в наст. время — EY) — британская аудиторско-консалтинговая компания, одна из крупнейших в мире. Основана в 1989 путём слияния американских аудиторских компаний A. C. Young, основанной Артуром Янгом в 1906 году, и Ernst & Whinney, основанной Элвином Эрнстом в 1903 году.\r\n\r\nПодробнее: http://www.ey.com/",
"logo_url": "http://########/EY_logo13.png"
}
在这里,我想得到full_name
,description
并logo_url
指的floor
是一个整数,其值为 2,3,4,5。
例如:
如果floor
是 1,我想从 1 楼获取值,如果是 2,则从二楼获取值,依此类推。接下来,将其显示在我的 CollectionView 上。但我的代码没有显示任何内容。任何帮助,将不胜感激!!
这是我到目前为止所做的:
var companies = [Employer]()
var companiesByFloor: [Int : [Employer]] = [:]
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Карта"
getEmployerData {
self.employerCollectionView.reloadData()
}
floorCollectionView.reloadData()
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 5.0
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return mapImage
}
func getEmployerData(completed: @escaping () -> ()) {
let url = URL(string: "http://######/employer/")
Alamofire.request(url!).responseJSON { response in
let data = response.data
do {
self.companies = try JSONDecoder().decode([Employer].self, from: data!)
for item in self.companies {
let arr = Employer(floor: item.floor, full_name: item.full_name, description: item.description, logo_url: item.logo_url)
self.companiesByFloor[item.floor] = [arr]
}
DispatchQueue.main.async {
completed()
}
}
catch let e{
print(e)
}
}
}
}
集合视图
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return companiesByFloor[selectedFloor]!.count
}
解决方案
Your code inside do block
in method getEmployerData
should be like below:
self.companies = try JSONDecoder().decode([Employer].self, from: data!)
for item in self.companies {
if self.companiesByFloor[item.floor] == nil {
self.companiesByFloor[item.floor] = [item]
} else {
self.companiesByFloor[item.floor].append(item)
}
}
推荐阅读
- sql - 在 Apache Superset 中添加一个 druid 集群作为 SQL 数据库
- python - pipenv + pyenv + jupyter
- python - 如何有效地执行这个 numpy 数组操作?
- scala - Spark/scala - 我们可以从数据框中的现有列值创建新列吗
- android - 如何在Android中按顺序(一个接一个)运行两个或多个动画?
- css - 托管动态内容的动画模板
- c# - 加载 XML 文件并转换为字符串
- python - 为什么 Python 脚本的第二行会影响 pip 的安装方式?
- angularjs - 删除浏览器数据后,ngstorage 的 $localStorage 仍可在 Angular 中使用
- java - Java泛型如何避免接口不能用不同的参数多次实现