繁体   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