ios - 如何搜索结构(Swift)

标签 ios swift uitableview struct uisearchbar

我正在更改我的 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].艺术家

但是,我希望能够使用 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 属性歌曲

并且无需将标题转换为 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 是您的歌曲数组。

请注意,还有很多其他清理工作。

并且您可能需要更新您的 TableView 数据源方法来处理 filteredSongsSong 数组而不是 String 数组>.

关于ios - 如何搜索结构(Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875057/

相关文章:

ios - 在 iOS 中单击按钮时如何取消选择所有单选按钮 uitableview 单元格

iphone - heightForRowAtIndexPath 用于更长的 NSString

ios - 捕获 UITableView 中显示的 UIWebView 内部的触摸

ios - 在 UIView Swift 中居中 CAShapeLayer

swift - UIBezierPath 的 UIView 角半径不起作用

ios - 使用 iOS 中的通用链接将数据从 App 传回 Safari 网页

swift - 是否有与 Swift 的 .description 相关的协议(protocol)?

ios - 在 Swift/iOS 中使用 SSASideMenu 导航

ios - 在 iOS 应用程序中的 fgets 上获取 EXC_BAD_ACCESS

ios - 如何增加主视图的 subview 的大小