Swift SearchBar 无法过滤数据
Swift SearchBar cannot filter data
我已经设置了 UISearchBar 东西。但我收到错误提示。
Cannot assign value of type '[cellData]' to type '[String]'
这是代码
struct cellData {
let jobTitle : AnyObject?
let companyName : String?
let jobLocation : String?
let jobDescription : String?
let jobReq : String?
let firstPosterImage : AnyObject?
let secondPosterImage : AnyObject?
let createdAt : Date
init(jobTitle: AnyObject?, companyName: String? = nil, jobLocation: String? = nil ,jobDescription: String? = nil, jobReq:String? = nil, firstPosterImage: AnyObject? = nil, secondPosterImage: AnyObject? = nil, timeStamp:Double) {
self.jobTitle = jobTitle
self.companyName = companyName
self.jobLocation = jobLocation
self.jobDescription = jobDescription
self.jobReq = jobReq
self.firstPosterImage = firstPosterImage
self.secondPosterImage = secondPosterImage
self.createdAt = Date(timeIntervalSince1970: timeStamp/1000)
}
}
var cellDataArray = [cellData]()
var filtered = [String]()
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
isSearching = false
tableView.reloadData()
} else {
isSearching = true
filtered = cellDataArray.filter({([=12=].jobTitle?.lowercased?.contains(searchText.lowercased()))!})
tableView.reloadData()
}
}
我在这一行中遇到错误
filtered = cellDataArray.filter({([=13=].jobTitle?.lowercased?.contains(searchText.lowercased()))!})
。请注意,CellDataArray 具有 cellData 结构。
我在 tableView 中使用 searchBar。
谢谢。
你的问题是 cellDataArray
和 filtered
是两种不同的数据类型( String
和 struct CellData
)所以你不能简单地将一个分配给其他没有像
这样的转换
let res = cellDataArray.filter({([=10=].jobTitle?.lowercased?.contains(searchText.lowercased()))!})
filtered = res.map { [=10=].anyProprtyInside } // property should be a String
您的意思可能是将 filtered 声明为
var filtered = [CellData]() // start structs / classes / protocols with uppercase letter
我已经设置了 UISearchBar 东西。但我收到错误提示。
Cannot assign value of type '[cellData]' to type '[String]'
这是代码
struct cellData {
let jobTitle : AnyObject?
let companyName : String?
let jobLocation : String?
let jobDescription : String?
let jobReq : String?
let firstPosterImage : AnyObject?
let secondPosterImage : AnyObject?
let createdAt : Date
init(jobTitle: AnyObject?, companyName: String? = nil, jobLocation: String? = nil ,jobDescription: String? = nil, jobReq:String? = nil, firstPosterImage: AnyObject? = nil, secondPosterImage: AnyObject? = nil, timeStamp:Double) {
self.jobTitle = jobTitle
self.companyName = companyName
self.jobLocation = jobLocation
self.jobDescription = jobDescription
self.jobReq = jobReq
self.firstPosterImage = firstPosterImage
self.secondPosterImage = secondPosterImage
self.createdAt = Date(timeIntervalSince1970: timeStamp/1000)
}
}
var cellDataArray = [cellData]()
var filtered = [String]()
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
isSearching = false
tableView.reloadData()
} else {
isSearching = true
filtered = cellDataArray.filter({([=12=].jobTitle?.lowercased?.contains(searchText.lowercased()))!})
tableView.reloadData()
}
}
我在这一行中遇到错误
filtered = cellDataArray.filter({([=13=].jobTitle?.lowercased?.contains(searchText.lowercased()))!})
。请注意,CellDataArray 具有 cellData 结构。 我在 tableView 中使用 searchBar。
谢谢。
你的问题是 cellDataArray
和 filtered
是两种不同的数据类型( String
和 struct CellData
)所以你不能简单地将一个分配给其他没有像
let res = cellDataArray.filter({([=10=].jobTitle?.lowercased?.contains(searchText.lowercased()))!})
filtered = res.map { [=10=].anyProprtyInside } // property should be a String
您的意思可能是将 filtered 声明为
var filtered = [CellData]() // start structs / classes / protocols with uppercase letter