我在类(class)列表中有 2 个结构。
struct Course : Decodable {
let CourseName : String;
let EntryRequirements : String;
}
struct WebsiteDescription : Decodable {
let FullProgramName :String
let ProgramName : String;
let Courses : [Course]
}
这些结构加载了 JSON
我已经实现了一个 UISearchController 来实际搜索类(class)名称。
我不知道如何从包含类(class)名称的 WebsiteDescription 中引用 Struct Course。
我用来包含 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();
}
它过滤一般程序名称,但我实际上想使用结构类(class)中的类(class)名称进行过滤。
提前谢谢你。
当我搜索 mentoring 时,整个 ShortCourses 部分都出现了,而此时应该只出现“Mentoring”。
指导是类(class)名称
最佳答案
替换这一行
allCourses.filter { $0.ProgramName.lowercased().contains(searchController.searchBar.text!.lowercased())
有了这个
allCourses.filter {
!$0.Courses.filter{$0.CourseName.localizedCaseInsensitiveContains(searchController.searchBar.text!)}.isEmpty
}
它会根据结构Course
中的CourseName
给出结果。
编辑:它会给你 Array
of Course
allCourses.flatMap{$0.Courses.filter{$0.CourseName.localizedCaseInsensitiveContains(searchController.searchBar.text!)}}
关于ios - UISearchController 在结构中搜索结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47918423/