【问题标题】:How to Search Struct (Swift)如何搜索结构(Swift)
【发布时间】:2017-07-02 20:44:53
【问题描述】:

我正在更改我的 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。我应该用什么替换这一行以便它搜索结构的标题?

感谢您的帮助!

【问题讨论】:

    标签: ios swift uitableview struct uisearchbar


    【解决方案1】:

    您需要将filteredTitles 更改为Song 的数组(并将其重命名为filteredSongs

    然后更新对filter 的调用,将text 替换为song,并且您可以访问songtitle 属性。

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

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

    您可能需要更新表视图数据源方法以处理 filteredSongsSong 的数组而不是 String 的数组。

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多