如何从 NSObject 数组中过滤项目
Posted
技术标签:
【中文标题】如何从 NSObject 数组中过滤项目【英文标题】:How to filter item from NSObject Array 【发布时间】:2019-04-29 11:29:02 【问题描述】:下面是我的 2 个对象
肌肉
struct MuscleListObject
var strMuscleName: String = ""
var arrMuscleExercise: [MuscleExerciseListObject] = []
ExerciseObject
struct MuscleExerciseListObject
var strExerciseName: String = ""
我知道 Muscle wise 过滤器,但我想明智地搜索项目锻炼。我怎样才能做到这一点?请指导我。
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
)
编辑
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()
请指导我有关过滤器调用的信息。 提前致谢
【问题讨论】:
不要使用类。使用结构 @RajeshKumarR,已更新 【参考方案1】:如果 Muscle 标题包含搜索查询,则返回整个 Muscle 对象。如果不使用搜索查询过滤运动对象并返回更新的肌肉对象。如果特定 Muscle 对象不包含搜索查询,则返回 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)
【讨论】:
这段代码工作正常,但是当我搜索某些内容时,结果很好,但是当我删除最后一个字符时,我的主数组中缺少一些项目arrExercise
当 searchBar.text 为空时 arrSearchedMuscle = arrExercise
我已经尝试过了,但在删除最后一个字符时结果仍然不匹配。用我的 SearchBar 代表更新了我的问题。
@Kuldeep 你在 tableview 数据源方法中使用过 arrSearchedMuscle 吗?
是的,我用过arrSearchedMuscle
。我根据isSearching
标志加载不同的数据。如果用户搜索了任何内容,那么我从arrSearchedMuscle
加载数据,否则从arrExercise
加载数据。以上是关于如何从 NSObject 数组中过滤项目的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个数组中获取具有批准 ID 的项目?地图()过滤器()还是?
从 NSObject 类更新 UITabBarController 栏项目