Swift:使用UISearchController / Predicates过滤结构数组

时间:2015-07-07 18:45:04

标签: ios arrays swift uitableview struct

想知道是否有人可以帮助我使用Swift中的谓词进行过滤。

我有一个有点混乱的数据源,我用来填充UITableView。数据源是一组结构。结构定义如下:

struct Exercises {
    let category: String
    let name : String
    let x_seed: [Double]
    let y_seed: [Double]
    let hasMult: Bool
}

现在在我的tableview控制器中,我拿着一个包含表格所有数据的结构数组。

class MainTableViewController: UITableViewController, UISearchResultsUpdating {


var exercises = [Exercises]()
var filtered_exercises = [Exercises]()
var resultSearchController = UISearchController()

override func viewDidLoad() {
    super.viewDidLoad()

    // MARK: - Table view data source
    self.exercises = [
        Exercises(category:"Sports", name:"Bowling", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
        Exercises(category:"Sports", name:"Water Polo", x_seed:[125,155,185], y_seed:[10.00, 12.40,14.80], hasMult:false),
        Exercises(category:"Sports", name:"Handball", x_seed:[125,155,185], y_seed:[12.00, 14.87, 17.77], hasMult:false),
        Exercises(category:"Sports", name:"Dancing", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:true),
        Exercises(category:"Sports", name:"Frisbee", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
        Exercises(category:"Sports", name:"Volleyball", x_seed:[125,155,185], y_seed:[3.00, 3.73, 4.43], hasMult:false),
        Exercises(category:"Sports", name:"Archery", x_seed:[125,155,185], y_seed:[3.50, 4.33, 5.17], hasMult:false),
        Exercises(category:"Sports", name:"Golf", x_seed:[125,155,185], y_seed:[3.50, 4.33, 5.17], hasMult:true)]

    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()

        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

    self.tableView.reloadData()
}

我想要做的是根据'名称'过滤练习数组。字段并填充新的数据源filtered_exercises以填充tableview。我不知道如何在这种情况下如何使用谓词。

// Search functionality 
func updateSearchResultsForSearchController(searchController: UISearchController)
{
    filtered_exercises.removeAll(keepCapacity: false)

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

    self.tableView.reloadData()
}

我知道我可以读取字符串数组中的所有名称并轻松地在tableview中显示它。问题是我需要保留结构,因为其中包含的数据被传递到其他视图控制器。

那么,我如何过滤结构数组?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您不坚持weight=1(由于您没有使用NSPredicate,请不要理解为什么,...),这是代码:

NSFetchRequest

打印水球,排球,高尔夫