Swift 加载单元格前过滤内容
我得到了在加载单元格之前需要过滤的数据模型。该系统具有以下结构:Swift 加载单元格前过滤内容,swift,filter,protocols,Swift,Filter,Protocols,我得到了在加载单元格之前需要过滤的数据模型。该系统具有以下结构: 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?
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
上。我只想要有标题
,图像
和摘要
的内容。我可以用项目筛选类别。如何在整个食品数据模型中传播。从技术上讲,我可以进行循环。我想知道我可以为每个模型添加一个通用协议/函数来实现相同的功能
使用
var filteredItem: Bool {
return title != nil && summary != nil && image != nil
}
基本上,你想要的是方法,你可以这样使用:
我认为你有一个数组<代码>食物< /代码>,所以你想过滤它,因为每个食物的<代码>内容<代码>(<代码> [类别] < /代码>)必须包含<代码>项目(<代码> [食物项目] < /代码>),具有非零属性:
// arr: [Food]
let filteredFood = arr.filter { food -> Bool in
var bool = false
food.content?.forEach { $0.items?.forEach({ foodItem in
bool = foodItem.title != nil && foodItem.summary != nil && foodItem.image != nil
})}
return bool
}
不清楚问题是什么。你想从所有类别中获取一个食品数据项的平面列表吗?我正在为Food
中的内容获取一个2D数组,该数组中的项目具有标题、图像和摘要,但不具有空值。过滤掉FoodItems只是部分相关,但为什么所有内容都是可选的?实际上有没有没有没有标题和内容的食物?数组应该是空的,但不是可选的。唯一可以选择的属性是图像
和可能的摘要
。我同意,但swiftlint希望decodables是可选的。服务器可能无法返回正确的数据。SwiftLint是一个不必要的挑剔者。如果服务器更改了数据格式,您将得到一个错误,这实际上会导致与不显示任何内容相同的用户体验。