[英]How to Search Struct (Swift)
我正在更改2个阵列...
var title = ["Title 1", "Title 2", "Title 3"]
var artist = ["Artist 1", "Artist 2", "Artist 3"]
...到一个结构
struct Song {
var title: String
var artist: String
}
var songs: [Song] = [
Song(title: "Title 1", artist "Artist 1"),
Song(title: "Title 2", artist "Artist 2"),
Song(title: "Title 3", artist "Artist 3"),
]
我将UITableView
设置为使单元格的标题等于songs[indexPath.row].title
,而单元格的副标题等于songs[indexPath.row].artist
。
但是,我希望能够使用UISearchBar
搜索UITableView
。 每当我只有变量而不是结构时,它就可以正常工作。 但是,现在我发现一个错误
var filteredTitles:[String] = []
var searchActive : Bool = false
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filteredTitles = title.filter //the error ({ (text) -> Bool in
let tmp: NSString = text as NSString
let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
return range.location != NSNotFound
})
if(filteredTitles.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.myTableView.reloadData()
}
如您所见,在filteredTitles = title.filter
行上,它调用了我的旧变量title
。 我应该用什么替换该行,以便它搜索结构的标题?
谢谢您的帮助!
您需要将您的filteredTitles
更改为Song
的数组(并将其重命名为filteredSongs
。
然后更新呼叫filter
,使得text
被替换song
并访问title
的财产song
。
并且无需将标题转换为NSString
。
这是您的代码,其中包含所需的更改:
var filteredSongs = [Song]()
var searchActive = false
func searchBar(searchText: String) {
filteredSongs = songs.filter { (song) -> Bool in
return song.title.range(of: searchText, options: [ .caseInsensitive ]) != nil
}
searchActive = !filteredSongs.isEmpty
self.myTableView.reloadData()
}
假设songs
是您的歌曲数组。
请注意,还有很多其他清理操作。
并且您可能需要更新表视图数据源方法,以filteredSongs
处理为Song
数组而不是String
数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.