我有一个有点凌乱的数据源,我用来填充UItableVIEw.数据源是一组结构.结构定义如下:
struct Exercises { let category: String let name : String let x_seed: [Double] let y_seed: [Double] let hasMult: Bool}
现在在我的tablevIEw控制器中,我拿着一个包含表的所有数据的结构数组.
class MaintableVIEwController: UItableVIEwController,UISearchResultsUpdating {var exercises = [Exercises]()var filtered_exercises = [Exercises]()var resultSearchController = UISearchController()overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad() // MARK: - table vIEw data source self.exercises = [ Exercises(category:"Sports",name:"Bowling",x_seed:[125,155,185],y_seed:[3.00,3.73,4.43],hasMult:false),Exercises(category:"Sports",name:"Water Polo",y_seed:[10.00,12.40,14.80],name:"Handball",y_seed:[12.00,14.87,17.77],name:"Dancing",hasMult:true),name:"Frisbee",name:"Volleyball",name:"Archery",y_seed:[3.50,4.33,5.17],name:"Golf",hasMult:true)] self.resultSearchController = ({ let controller = UISearchController(searchResultsController: nil) controller.searchResultsUpdater = self controller.dimsBackgroundDuringPresentation = false controller.searchbar.sizetoFit() self.tableVIEw.tableheaderVIEw = controller.searchbar return controller })() self.tableVIEw.reloadData()}
我想要做的是根据’name’字段过滤exercise数组,并填充一个新的数据源filtered_exercises来填充tablevIEw.我不知道如何在这种情况下如何使用谓词.
// Search functionality func updateSearchResultsForSearchController(searchController: UISearchController){ filtered_exercises.removeAll(keepCapacity: false) let searchPredicate = nspredicate(format: "SELF CONTAINS[c] %@",searchController.searchbar.text!) // ?????????????? self.tableVIEw.reloadData()}
我知道我可以读取字符串数组中的所有名称并轻松地在tablevIEw中显示它.问题是我需要保留结构,因为其中包含的数据被传递到其他视图控制器.
那么,我如何过滤一组结构?
谢谢!
解决方法 如果你不坚持nspredicate(因为你没有使用NSFetchRequest,看不出你应该这么做的原因,…),这里是代码:struct Exercises { let category: String let name : String let x_seed: [Double] let y_seed: [Double] let hasMult: Bool}let exercises = [ Exercises(category:"Sports",hasMult:true)]let options = NsstringCompareOptions.CaseInsensitiveSearch | NsstringCompareOptions.DiacriticInsensitiveSearch// Filter exercises by name (case and diacritic insensitive)let filteredExercises = exercises.filter { .name.rangeOfString("ol",options: options) != nil}let filteredExercisenames = ",".join(filteredExercises.map({ .name }))println(filteredExercisenames)
它打印水球,排球,高尔夫.
总结以上是内存溢出为你收集整理的ios – Swift:使用UISearchController / Predicates过滤结构数组全部内容,希望文章能够帮你解决ios – Swift:使用UISearchController / Predicates过滤结构数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)