我在课程列表中有2个结构。
struct Course : Decodable {
let CourseName : String;
let EntryRequirements : String;
}
struct WebsiteDescription : Decodable {
let FullProgramName :String
let ProgramName : String;
let Courses : [Course]
}
这些结构加载了JSON
我已经实现了一个UISearchController来实际搜索课程名称。
我不知道如何从WebsiteDescription中引用包含课程名称的Struct课程。
我过去用于包含WebsiteDescription的数组
var allCourses = [WebsiteDescription]()
var filteredCourses = [WebsiteDescription]()
我试图用这种方法过滤它
func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text! == "" {
filteredCourses = allCourses
acTableView.reloadData()
} else {
filteredCourses = allCourses.filter { $0.ProgramName.lowercased().contains(searchController.searchBar.text!.lowercased()) }
}
self.acTableView.reloadData();
}
它过滤了一般程序名称,但我实际上想要使用struct Course中的CourseName进行过滤。
先感谢您。
当我搜索指导时,整个ShortCourses部分出现时只会出现'指导'。
指导是课程名称
替换此行
allCourses.filter { $0.ProgramName.lowercased().contains(searchController.searchBar.text!.lowercased())
有了这个
allCourses.filter {
!$0.Courses.filter{$0.CourseName.localizedCaseInsensitiveContains(searchController.searchBar.text!)}.isEmpty
}
它将根据你在CourseName
结构中的Course
给出结果。
编辑:它会给你Array
的Course
allCourses.flatMap{$0.Courses.filter{$0.CourseName.localizedCaseInsensitiveContains(searchController.searchBar.text!)}}