ios - Swift:过滤嵌套数组
问题描述
我正在尝试过滤具有嵌套数组的Deals
状态的数组,每个数组都有一个。我想根据调用函数时给出的状态过滤状态和预订的交易。并且都是枚举。
看起来像这样:DealStaus
Bookings
BookingStatus
.won
BookingStatus
DealStatus
Deal
Booking
public struct Deal: Decodable {
public let identifier: String?
public let status: DealStatus
public let bookings: [Booking]?
}
public struct Booking: Decodable {
public let identifier: String?
public let status: BookingStatus
public let startDate: Date?
public let endDate: Date?
}
为此,我编写了以下代码段:
private func getDeals(with bookingStatus: [BookingStatus]) -> [Deal] {
guard let user = currentUser, let deals = user.deals else { return [Deal]() } // Note: user is a class attribute
return deals.filter { $0.status == .won && $0.bookings?.filter { bookingStatus.contains($0.status) }}
}
这不起作用。编译器给出以下错误:
可选类型“[预订]?” 不能用作布尔值;改为测试 '!= nil'
解决方案
按照@matt 的指示,我将其分解:
private func getDeals(with bookingStatus: [BookingStatus]) -> [Deal] {
guard let user = currentUser, let deals = user.deals else { return [Deal]() }
return deals
.filter { $0.status == .won }
.filter { $0.bookings?.contains(where: { bookingStatus.contains($0.status)} ) ?? false }
}
推荐阅读
- continuous-integration - Bitbucket Pipeline 在合并到 master 时修改文件
- c# - 为什么我的覆盖初始化没有被调用?
- mongodb - Mongodb查找所有唯一列表元素的出现次数
- c# - 在等待开始并失败之前试图找到元素
- android - Cardview 阴影在 api 18 上未正确显示
- javascript - 如何在 HTML 按钮单击时更改为标记的中心
- bokeh - 如何通过回调函数更新图像绘图的 color_mapper / colorbar?
- php - 可以在 php 中使用 $conn 全局变量到类中吗?
- google-cloud-dataflow - 如何(单元)在 python 的 apache-beam 中测试流管道?
- python - 使用 Pandas 在 DB 表中更新的更好方法