我有两个结构,在课程列表中。
struct Course : Decodable {
let CourseName : String;
let EntryRequirements : String;
}
struct WebsiteDescription : Decodable {
let FullProgramName :String
let ProgramName : String;
let Courses : [Course]
}
这些结构加载了JSON
我已经实现了一个UISearchController来实际搜索课程名称。
我不知道如何从包含课程名称的WebsiteDescription中引用结构课程。
我曾经用于包含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部分出现。
指导是课程名称
答案 0 :(得分:1)
替换此行
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!)}}