簡體   English   中英

Swift:過濾嵌套數組

[英]Swift: Filter nested arrays

我正在嘗試過濾狀態為DealStausDeals數組,其中DealStaus具有嵌套的Bookings數組,每個都有一個BookingStatus 我想根據調用該函數時給出的狀態來過濾狀態為.won和Bookings的Deals。 BookingStatusDealStatus都是枚舉。 DealBooking看起來像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM