ios - 如何从 JSON 获取特定值并将其元素显示在 CollectionView 上?

标签 ios swift xcode

是否可以从 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"
}

在这里,我想要获取引用 floorfull_namedescriptionlogo_url,它是一个整数,值为 2、3、4、5。

例如:

如果floor是1,我想从1楼获取值,如果是2,那么从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)
        }
    }
  }
}

Collection View

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return companiesByFloor[selectedFloor]!.count
}

Screenshot of Collection View

最佳答案

方法 getEmployerData 中的 do block 内的代码应如下所示:

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)
    }         
}

关于ios - 如何从 JSON 获取特定值并将其元素显示在 CollectionView 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52464552/

相关文章:

ios - 当框架移出屏幕时,UINavigationBar 下的区域不会响应点击

ios - Swift 在 Storyboard中显示 segues(箭头)时以编程方式呈现 ViewController

ios - iPhone 6 - 应用程序未填满屏幕

xcode - Swift 在枚举上使用 if 导致错误无法转换为 '_ArrayCastKind'

ios - 我可以在 iOS 上使用图像作为音频剪辑的海报框架吗?

ios - 重用我为非常相似但不相同的情况创建的 UIViewController 子类 : recommended?

ios - 在分割 View 中向原型(prototype)单元添加自定义标签

swift - 如何从标准日期时间格式中提取日期和时间?

swift - 如何更改 UIAlertController 中按钮的字体

ios - 如何在横向设置垂直约束( Storyboard)