[英]Swift: Filter nested arrays
我正在嘗試過濾狀態為DealStaus
的Deals
數組,其中DealStaus
具有嵌套的Bookings
數組,每個都有一個BookingStatus
。 我想根據調用該函數時給出的狀態來過濾狀態為.won
和Bookings的Deals。 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 }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.