我正在尝试在数组条件下过滤掉数组
public struct SalesDO: Entity {
public var ID: String = UUID().uuidString
public var isDeleted: Bool = false
public var salesItems = [SalesItemDO]()
}
public struct SalesItemDO: Entity {
public var ID: String = UUID().uuidString
public var isDeleted: Bool = false
public var modifiers = [SalesItemModifierDO]()
}
public struct SalesItemModifierDO: Entity {
public var ID: String = UUID().uuidString
public var isDeleted: Bool = false
}
我想要实现的是过滤掉那些未删除的SalesItem,以及里面同样没有删除的salesItem修饰符
我尝试使用Swift过滤器数组函数,但这是编译器错误
let rawSales = self.service.getSales(object: SalesDO()) as? SalesDO
if var sales = rawSales {
let filteredSalesItem = sales.salesItems.filter({$0.modifiers.filter({$0.isDeleted == false})})
}.filter({$0.isDeleted == false})
我也尝试过此代码
// It becomes SalesItemModifierDO array
let filteredsales = sales.salesItems.flatMap({$0.modifiers.filter({$0.wbDeleted == false})}).filter({$0.wbDeleted == false})
例如
Item A is not deleted
=> Modifier 1
=> Modifier 2
=> Modifier 3 : Deleted
Item B is deleted
=> Modifier 1
=> Modifier 2
我正在尝试实现仅显示带有两个修饰符的项A的功能,因为修饰符3已被删除。
有人可以指导我所缺少的吗?给予的任何帮助都将受到高度赞赏。谢谢
答案 0 :(得分:1)
您可以过滤数组以删除已删除的销售项目,然后映射其余项目以删除已删除修饰符的修饰符。
let filteredSalesItem = sales.salesItems.filter({ !$0.isDeleted }).map { (item) -> SalesItemDO in
var newItem = item // Need to make mutable interim item to change modifiers array
newItem.modifiers = newItem.modifiers.filter({ !$0.isDeleted })
return newItem
}