在 swift 中搜索 UISearchbar 中的嵌套数组
Search nested Array in UISearchbar in swift
我正在尝试搜索一个嵌套项目数组,在其中输入文本并搜索团队和用户数组以及 returns 一个对象。我可以搜索团队但无法搜索用户嵌套数组。
这是我的代码
// Array
let searchArray = [MyTeam]()
// Search
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchArray = searchArray.filter { ([=11=].name.range(of: searchString, options: .caseInsensitive) != nil || ([=11=].users.filter{([=11=].name.range(of: searchString, options: .caseInsensitive) != nil }) ) }
}
// Model
struct MyTeam: Codable {
let id: Int
let name: String
let users: [MyUser]
}
struct MyUser: Codable {
let id: Int
let name: String
}
而不是在此处的用户数组上使用 filter
[=10=].users.filter {([=10=].name.range(of: searchString, options: .caseInsensitive) != nil }
您可以使用 contains
方法 return Bool
[=11=].users.contains { [=11=].name.range(of: searchString, options: .caseInsensitive) != nil }
所以最终的函数看起来像这样。另外我认为你需要使用 searchText
而不是 searchString
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchArray = searchArray.filter { team in
team.name.range(of: searchText, options: .caseInsensitive) != nil
|| team.users.contains { user in
user.name.range(of: searchText, options: .caseInsensitive) != nil
}
}
}
我正在尝试搜索一个嵌套项目数组,在其中输入文本并搜索团队和用户数组以及 returns 一个对象。我可以搜索团队但无法搜索用户嵌套数组。
这是我的代码
// Array
let searchArray = [MyTeam]()
// Search
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchArray = searchArray.filter { ([=11=].name.range(of: searchString, options: .caseInsensitive) != nil || ([=11=].users.filter{([=11=].name.range(of: searchString, options: .caseInsensitive) != nil }) ) }
}
// Model
struct MyTeam: Codable {
let id: Int
let name: String
let users: [MyUser]
}
struct MyUser: Codable {
let id: Int
let name: String
}
而不是在此处的用户数组上使用 filter
[=10=].users.filter {([=10=].name.range(of: searchString, options: .caseInsensitive) != nil }
您可以使用 contains
方法 return Bool
[=11=].users.contains { [=11=].name.range(of: searchString, options: .caseInsensitive) != nil }
所以最终的函数看起来像这样。另外我认为你需要使用 searchText
而不是 searchString
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchArray = searchArray.filter { team in
team.name.range(of: searchText, options: .caseInsensitive) != nil
|| team.users.contains { user in
user.name.range(of: searchText, options: .caseInsensitive) != nil
}
}
}