Filtrado de una matriz 2D con objects en Swift

He creado la siguiente struct para mostrar una vista de tabla:

struct Section { var heading : String var items : [MusicModel] init(category: String, objects : [MusicModel]) { heading = category items = objects } } 

Entonces tengo la siguiente function para agregar objects a la matriz:

 var sectionsArray = [Section]() func getSectionsFromData() -> [Section] { let basicStrokes = Section(category: "Basic Strokes", objects: [MusicModel(title: Title.EightOnAHand, author: .None, snare: true, tenor: true)]) sectionsArray.append(basicStrokes) return sectionsArray } 

Entonces, la vista de tabla se carga bien con encabezado de sección y filas para los datos. Quiero poder filtrar las celdas de la tabla, pero estoy teniendo dificultades para encontrar la syntax adecuada para filtrar una matriz de objects basada en un instrumento seleccionado por el usuario que se envía a una function de filtrado. Esto es lo que tengo:

 func getMusic(instrument: MusicData.Instrument) -> [Section] { if instrument == .Tenor { let filtenetworking = sections.filter {$0.items.filter {$0.tenor == true}} return filtenetworking } else { let filtenetworking = sections.filter {$0.items.filter {$0.snare == true}} return filtenetworking } } 

El object se devuelve solo si la trampa o el tenor son verdaderos. El error que obtengo es: No se puede invocar 'filter' con una list de arguments de tipo '(@noescape (MusicModel) throws -> Bool)'

¿Alguna idea? Si tienes una sugerencia sobre una mejor manera de hacer esto, lo apreciaría mucho. ¡Gracias!

Utilice este método getMusic actualizado,

 func getMusic(instrument: MusicData.Instrument) -> [Section] { if instrument == .Tenor { var filtenetworking = sections.filter {$0.items.filter {$0.tenor == true}.count > 0} filtenetworking = filtenetworking.map({ (var section: Section) -> Section in section.items = section.items.filter {$0.tenor == true} return section }) return filtenetworking } else { let filtenetworking = sections.filter {$0.items.filter {$0.snare == true}.count > 0} filtenetworking = filtenetworking.map({ (var section: Section) -> Section in section.items = section.items.filter {$0.snare == true} return section }) return filtenetworking } } 

O el siguiente. (Tenga en count que su Sección es struct , lo que significa que se copyrá en todo).

 func getMusic(instrument: MusicData.Instrument) -> [Section] { return sections.map { (var s: Section) -> Section in s.items = s.items.filter { instrument == .Tenor ? $0.tenor : $0.snare } return s } }