请考虑以下课程
class Category {
var tag: String?
var itemList: [Item]?
}
class Item {
var id: Int?
var type: String?
var itemDetails: ItemDetails?
}
class ItemDetails {
var description: String?
var name: String?
var price: Float?
}
给出一个类别对象的数组。
var categoryList: [Category]
我想通过仅提取 ItemDetails 中的名称(以应用过滤器)和 id 顺序来创建新的对象数组重建类别对象的后阵列。
因此,我必须重建类别对象的数组 从新对象数组开始。
如何使用map
功能进行提取和重建?
以下是其他数据源的示例:
数据源1:
var categoryList: [Category]
,其中需要提取name
数据源2:
var searchList = [SearchItem]
,要在其中提取标题。
Class SearchItem {
var id: Int?
var details: SearchItemDetails?
var type: String?
}
Class SearchItemDetails {
var description: String?
var title: String?
}
数据源3
var products: [Products]
,要在其中提取标题。
Class Products {
var id: Int?
var details: ProductDetails?
var type: String?
}
class ProductDetails {
var description: String?
var title: String?
}
答案 0 :(得分:1)
要获取仅包含名称的数组,请像您提到的那样执行map
:
let categories: [Category] = ... // this already exists
let itemNames = categories.map { $0.itemList?.map({ $0.itemDetails?.name }) }
但这将保留可选内容。如果您不想使用可选的选项,请改用compactMap
。
但是,重建实际上没有任何意义。您是否正在使用ID来访问数据库或网络服务?这是您能够重构Category
s原始数组的唯一可能方法。为什么不只保留原始数组呢?