【问题标题】:How to search inside of Dictionary in Swift如何在 Swift 中的字典内部进行搜索
【发布时间】:2016-02-20 03:51:01
【问题描述】:

在我的UITableView 中,我有带有头像图像和姓氏(UIImage 和标签)的单元格。我想在我的UITableView 中搜索。因此,当我输入我的用户名或姓氏时,它会在头像图像中显示用户名姓氏。

现在,我可以使用以下代码在数组内部进行搜索:

var rosters = [String: UIImage]()
var displayNames = [String]()
var filteredTableData = [String]()

// Here I remove all elements from the array and add to it user display name and avatar
rosters.removeAll(keepCapacity: false)
for user in OneRoster.buddyList.fetchedObjects! {
  var roster = OneRoster.userFromRosterForJID(jid: user.jidStr)
  var image = OneChat.sharedInstance.xmppvCardAvatarModule?.photoDataForJID(roster?.jid)

  rosters[user.displayName] = UIImage(data: image!)!
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> onlineUserCell {
    let cell:onlineUserCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! onlineUserCell

    if (self.resultSearchController.active) {
      cell.username.text = filteredTableData[indexPath.row]
      //cell.avatarImage.image = images[indexPath.row]

      return cell
    }
}


func updateSearchResultsForSearchController(searchController: UISearchController)
    {
        filteredTableData.removeAll(keepCapacity: false)
        displayNames.removeAll(keepCapacity: false)

        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)

        for (name, image) in rosters {
            displayNames.append(name)

            let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
            let array = (displayNames as NSArray).filteredArrayUsingPredicate(searchPredicate)
            filteredTableData = array as! [String]
        }

        let array = (displayNames as NSArray).filteredArrayUsingPredicate(searchPredicate)
        filteredTableData = array as! [String]

        self.tableView.reloadData()
    }

因此,此代码仅在姓名中搜索,没有头像图像。我想,我可以使用字典,如:

var users = [UIImage: String]()

然后按字符串搜索并在单元格中显示为UIImage 和字符串。但是我搜索了很多,找不到如何搜索,后来我可以通过字符串搜索并得到UIImage的结果。

有什么想法吗?

【问题讨论】:

  • 你不应该真正使用多个数组来保存数据,它会很快变得混乱,创建一个结构或类来保存名称和相应的图像。然后使用 swift filter 搜索/过滤自定义对象数组。

标签: ios swift uitableview dictionary uisearchbar


【解决方案1】:

可以通过访问字典中的值并搜索它们来完成搜索字典

var users = [UIImage: String]()
let values = Array(users.values)

但是,这种使用字典似乎有点错误,因为我猜你永远不会根据 UIImage 查找值。

你应该使用一个元组或一个同时包含 UIImage 和 String 的类

var users = [(image:UIImage,name:String)]()

然后您可以简单地过滤像

这样的值
users.filter { (element:(image:UIImage, name:String)) -> Bool in
    return element.name.containsString(searchfrase)
}

【讨论】:

  • 我收到一个错误:Instance member 'users' cannot be used on type 'TableViewController'
  • 我需要更多信息才能弄清楚你在做什么。
  • 我还能告诉你什么?请问我,拜托
  • 您尝试了我建议的哪些解决方案,您的代码在使用时是什么样的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2016-03-11
  • 2016-11-15
  • 1970-01-01
  • 2011-11-07
  • 2015-09-28
相关资源
最近更新 更多