首页 > 解决方案 > Swift过滤数组中的自定义对象

问题描述

我想知道是否有任何有效的方法来过滤一组自定义对象,比如我下面的那个。我有一个 Author 类和一个 Book 类,它可以有多个具有不同属性的作者,例如书籍状态的枚举、作者所写书籍的评论以及书籍状态发生变化的数组。我想按不同的状态、作者和日期进行过滤,所有 4 个参数都是可选的。

class Author : Equatable {
   let name : String
   let id = UUID()
}

class Book : Equatable {
   let date = Date()
   var comments : [Comment] = []
   var writtenBy : [Author] = []
   var state : State = .available {
       didSet {
            updateState(timestamp: Date())
        }
    }
}

enum State : String, CaseIterable {
    case available
    case unavailable
    case missing
}


class CollectionOfBooks {
    private static var arrayOfBooks : [Book] = []

    static func getAllBooks(state: State?, authorId: UUID?, fromDate: Date?, toDate : Date?) -> [Book] {


    let filteredArray = arrayOfBooks.filter({$0.state == state})
    filteredArray = arrayOfBooks.filter....
    filteredArray = arrayOfBooks.filter....
    filteredArray = arrayOfBooks.filter....

return filtered array 

 // what is the most efficient way of sorting the my array? 
//At the moment i only know how to achieve this by filtering one parameter at a time. 
    }
}

标签: arraysswiftsortingfiltering

解决方案


您可以将所有条件连接到一个条件中。

let filteredArray = arrayOfBooks.filter({$0.state == state && $0.name.contains("asdf")})

推荐阅读