Reputation: 4552
Below is my 2 Objects
Muscle
struct MuscleListObject {
var strMuscleName: String = ""
var arrMuscleExercise: [MuscleExerciseListObject] = []
}
ExerciseObject
struct MuscleExerciseListObject {
var strExerciseName: String = ""
}
I know the Muscle wise filter but i want to search item exercise wise. how can I do this? please guid me about this.
arrSearchedMuscle = self.arrExercise.filter({ objMuscle in
if let name = objMuscle.strMuscleName as? String, let query = searchBar.text {
return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
}
return false
})
EDIT
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.count == 0 {
isSearching = false
arrSearchedMuscle = arrExercise
}
else {
isSearching = true
let query = searchText
arrSearchedMuscle = arrExercise.compactMap { category -> MuscleListObject? in
if category.strMuscleName.range(of: query, options: [.caseInsensitive]) != nil {
return category
} else {
arrSearchedExercise = category.arrMuscleExercise.filter({ $0.strExerciseName.range(of: query, options: [.caseInsensitive]) != nil })
if arrSearchedExercise.isEmpty {
return nil
} else {
let newCategory = category
newCategory.arrMuscleExercise = arrSearchedExercise
return newCategory
}
}
}
print(arrExercise)
print(arrSearchedMuscle)
}
self.tblVWExercise.reloadData()
}
Please guide me about the filter call. Thanks in advance
Upvotes: 1
Views: 227
Reputation: 15748
If Muscle title contains search query return whole Muscle object. If not filter Exercise objects with search query and return updated Muscle object. If particular Muscle object doesn't contain search query return nil
let query = "band"
arrSearchedMuscle = arrExercise.compactMap { category -> MuscleListObject? in
if category.strMuscleName.range(of: query, options: [.caseInsensitive]) != nil {
return category
} else {
let filteredItems = category.arrMuscleExercise.filter({ $0.strExerciseName.range(of: query, options: [.caseInsensitive]) != nil })
if filteredItems.isEmpty {
return nil
} else {
var newCategory = category
newCategory.arrMuscleExercise = filteredItems
return newCategory
}
}
}
print(arrExercise)
print(arrSearchedMuscle)
Upvotes: 1