在加载单元格之前过滤内容
Filtering content before loading cells
我得到了在加载单元格之前需要过滤的数据模型。具有以下结构:
struct Food: Decodable {
let title: String?
let content: [Category]?
}
struct Category: Decodable {
let title: String?
let items: [FoodItem]?
}
struct FoodItem: Decodable {
let title: String?
let image: URL?
let summary: String?
}
我将它们加载到 UICollectionView
上。我只想要 title
、image
和 summary
的内容。我可以用项目过滤类别。如何在整个 Food
数据模型中传播。从技术上讲,我可以 for
循环这个。我想知道我可以向每个模型添加一个通用的 protocol/function 来实现相同的效果。
使用
过滤项目
var filteredItem: Bool {
return title != nil && summary != nil && image != nil
}
基本上,您要找的是 filter(_:)
方法,您可以这样使用:
我认为你有一个 Food
数组,所以你想过滤它,因为每个食物的 content
([Category]
) 必须包含 items
([FoodItem]
) 具有非零属性:
// arr: [Food]
let filteredFood = arr.filter { food -> Bool in
var bool = false
food.content?.forEach { [=10=].items?.forEach({ foodItem in
bool = foodItem.title != nil && foodItem.summary != nil && foodItem.image != nil
})}
return bool
}
我得到了在加载单元格之前需要过滤的数据模型。具有以下结构:
struct Food: Decodable {
let title: String?
let content: [Category]?
}
struct Category: Decodable {
let title: String?
let items: [FoodItem]?
}
struct FoodItem: Decodable {
let title: String?
let image: URL?
let summary: String?
}
我将它们加载到 UICollectionView
上。我只想要 title
、image
和 summary
的内容。我可以用项目过滤类别。如何在整个 Food
数据模型中传播。从技术上讲,我可以 for
循环这个。我想知道我可以向每个模型添加一个通用的 protocol/function 来实现相同的效果。
使用
过滤项目var filteredItem: Bool {
return title != nil && summary != nil && image != nil
}
基本上,您要找的是 filter(_:)
方法,您可以这样使用:
我认为你有一个 Food
数组,所以你想过滤它,因为每个食物的 content
([Category]
) 必须包含 items
([FoodItem]
) 具有非零属性:
// arr: [Food]
let filteredFood = arr.filter { food -> Bool in
var bool = false
food.content?.forEach { [=10=].items?.forEach({ foodItem in
bool = foodItem.title != nil && foodItem.summary != nil && foodItem.image != nil
})}
return bool
}