我如何使我的排序功能工作以在 tableview 中实际显示排序的书籍

how do I make my sort function working to actually display the sorted books in the tableview

您好,我尝试使用 CocoaPods 下拉菜单创建一个排序按钮,代码没有显示任何错误并且菜单有效,但是如果我点击该按钮,则没有任何反应。

    dropDown.selectionAction = { [weak self] (index: Int, item: String) in //8
      guard let _ = self else { return }
      sender.setTitle(item, for: .normal) //9
       
        let realm = try! Realm()
        var books = realm.objects(Book.self).sorted(byKeyPath: "title", ascending: false)
    
        if item == "sort by author" {
            func filterResultsbyauthor(searchString: String){
                 let predicate = NSPredicate(format: "author BEGINSWITH [c]%@", searchString)
                books = realm.objects(Book.self).filter(predicate).sorted(byKeyPath:"author", ascending: true)
                self?.tableview.reloadData()
            }
        }
    }

错误可能在这里:

func filterResultsbyauthor(searchString: String){
    let predicate = NSPredicate(format: "author BEGINSWITH [c]%@", searchString)
    books = realm.objects(Book.self).filter(predicate).sorted(byKeyPath:"author", ascending: true)
    self?.tableview.reloadData()
}

您定义了一个函数,但从未调用它。

您可以:

  1. 调用函数
func filterResultsbyauthor(searchString: String){
    let predicate = NSPredicate(format: "author BEGINSWITH [c]%@", searchString)
    books = realm.objects(Book.self).filter(predicate).sorted(byKeyPath:"author", ascending: true)
    self?.tableview.reloadData()
}

filterResultsbyauthor(searchString: "Your search string") /// here!
  1. 去掉函数声明,只做一段代码
let predicate = NSPredicate(format: "author BEGINSWITH [c]%@", "Your search string")
books = realm.objects(Book.self).filter(predicate).sorted(byKeyPath:"author", ascending: true)
self?.tableview.reloadData()