簡體   English   中英

如何搜索結構(快速)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM