Swift:获取从api返回的特定值类型

yks3o0rb  于 2022-11-28  发布在  Swift
关注(0)|答案(1)|浏览(156)

我正在使用fruityvice api。我目前正在建立一个单元格的集合视图,显示不同水果的科、属和目,每个单元格都在自己的区域中。当用单元格填充这些区域时,我得到了很多重复的单元格。

我大概知道为什么在定义numberOfItemsInSection时要调用fruits.count(我将调用可编码模型的变量命名为fruits.count)。
api调用的模型:

struct AllFruits: Codable {
    let family: String
    let genus: String
    let id: Int
    let name: String
    let nutritions: Nutrion
    let order: String
    
    struct Nutrion: Codable {
        let carbohydrates: Double
        let protein: Double
        let fat: Double
        let calories: Double
        let sugar: Double
    }
}

每个部分计数:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        
            if section == 0 {
                return fruits.count
            }
            else if section == 1 {
                return fruits.count
            }
            else if section == 2 {
                return fruits.count
            }
        return fruits.count
        
    }

来自API的示例:

{
    "genus": "Malus",
    "name": "Apple",
    "id": 6,
    "family": "Rosaceae",
    "order": "Rosales",
    "nutritions": {
        "carbohydrates": 11.4,
        "protein": 0.3,
        "fat": 0.4,
        "calories": 52,
        "sugar": 10.3
    }
}

我需要知道的是如何返回一个值类型。所以在每一节中,我只为每一种科、属和目指定一个单元格。没有重复。
我试过使用.map,.filter,.sort和大量的谷歌搜索,但我只是谷歌搜索错误或我错过了一些基本的东西

0g0grzrc

0g0grzrc1#

1.你可以得到所有水果/api/水果/所有
1.将其Map到AllFruits模型
1.获取所有可用的水果系列
1.按水果系列获取值

let allFruits: [AllFruits] = [] // your values
let fruitFamilies = Set(allFruits.map {$0.family}) // Set used remove duplicates
let fruitsOnlyOneFamily = fruitFamilies.filter {$0.family == "<your concrete fruit family name>"}

相关问题