[英]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.