Ios 类(Swift 3)数组中的筛选结果

Ios 类(Swift 3)数组中的筛选结果,ios,arrays,swift,uitableview,Ios,Arrays,Swift,Uitableview,在类中 class Objects { var number: Int! var name: String! init(number: Int, name: String) { self.number = number self.name = name } } 在viewController var allObjects = [Objects]() var inSearchMode = fals

类中

class Objects {

    var number: Int!
    var name: String!

    init(number: Int, name: String) {
        self.number = number
        self.name = name
    }
}        
viewController

    var allObjects = [Objects]()
    var inSearchMode = false

    @IBOutlet weak var searchBar: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()

        searchBar.delegate = self

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{


        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! Cell


        if inSearchMode {

            let fill: Objects!
            fill = filteredObject[indexPath.row]
            cell.configureCell(fill)

        } else {

            let fill: Objects!
            fill = allObjects[indexPath.row]
            cell.configureCell(fill)

            return cell
        }

    }

    return UITableViewCell()

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if inSearchMode {

            return filteredObject.count

        }

        return allObjects.count

        }

    func numberOfSections(in tableView: UITableView) -> Int {

        return 1

    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        if searchBar.text == nil || searchBar.text == "" {

            inSearchMode = false
            tableView.reloadData()
            view.endEditing(true)

        } else {

            inSearchMode = true
            var lowerCase = Int(searchBar.text!)
            filteredObject = allObjects.filter({$0.number == lowerCase})
            tableView.reloadData()

            print(filteredObject)

        }

    }
我想有一个搜索栏,过滤和显示只有一个结果,其中包含我们正在寻找的号码。我考虑过使用
contains
并将我们从搜索栏输入的数字输入


我设法将一个对象放入
filteredObject
,但它不会显示在
tableView
中,我将使用计算属性驱动tableView;此属性是所有对象或筛选对象:


我将使用计算属性来驱动tableview;此属性是所有对象或筛选对象:


请仔细查看代码的这一部分:

if inSearchMode {

    let fill: Objects!
    fill = filteredObject[indexPath.row]
    cell.configureCell(fill)

} else {

    let fill: Objects!
    fill = allObjects[indexPath.row]
    cell.configureCell(fill)

    return cell
}

在搜索模式下,您没有返回单元格,因此在搜索时看不到任何内容。

请仔细查看这部分代码:

if inSearchMode {

    let fill: Objects!
    fill = filteredObject[indexPath.row]
    cell.configureCell(fill)

} else {

    let fill: Objects!
    fill = allObjects[indexPath.row]
    cell.configureCell(fill)

    return cell
}

在搜索模式下,您没有返回单元格,这就是为什么您在搜索时看不到任何内容。

这非常有效!一旦一个项目变得更大,错过这些小细节是很正常的,非常感谢。我有一个安全的习惯来防止这种情况发生,我通常在第一行将我的单元格出列,然后在最后一行返回,这样无论我犯了什么错误,单元格都会被返回,如果我搞砸了,可能只是返回了错误的内容。如果出于任何原因需要返回一个空的手机,我会调用return nil,而不是什么都不做,以表明我没有返回任何东西。这非常有效!一旦一个项目变得更大,错过这些小细节是很正常的,非常感谢。我有一个安全的习惯来防止这种情况发生,我通常在第一行将我的单元格出列,然后在最后一行返回,这样无论我犯了什么错误,单元格都会被返回,如果我搞砸了,可能只是返回了错误的内容。如果出于任何原因需要返回一个空单元格,我会调用return nil,而不是什么都不做,以表明我没有返回任何内容