实例方法“包含”要求“ UITextField”符合“ StringProtocol”

时间:2020-07-08 16:40:41

标签: arrays swift uialertcontroller

我有一个表视图,显示带有Name和Category属性的sourceArray。我想根据UIAlertController的用户输入来过滤sourceArray的Category属性,但是得到错误“实例方法'包含'要求'UITextField'符合'StringProtocol'”。任何帮助将不胜感激。

var sourceArray = [(Name: String, Category: String, Picture1: UIImage, Picture2: UIImage, Picture3: UIImage, Description: String)]()

@IBAction func filterButton(_ sender: UIBarButtonItem) {
    var textField = UITextField()
    let alert = UIAlertController(title: "Category", message: nil, preferredStyle: .alert)
    let action = UIAlertAction(title: "Filter", style: .default) { (action) in
        print(textField)
        let filtered = sourceArray.filter({$0.Category.contains(textField)})
        self.filteredArray = filteredArray.isEmpty ? sourceArray : filtered
        self.tableview.reloadData()

    }
    alert.addTextField { (alertTextField) in
        alertTextField.placeholder = "Biceps, Chest, Shoulders, etc."
        textField = alertTextField
    }
    alert.addAction(action)
    present(alert, animated: true, completion: nil)
    
}

1 个答案:

答案 0 :(得分:0)

我遇到的这个问题是无法将textField识别为字符串。因此,我添加了一个常量文本作为字符串,并为它分配了textField.text。

@IBAction func filterButton(_ sender: UIBarButtonItem) {
    var textField = UITextField()
    let alert = UIAlertController(title: "Category", message: nil, preferredStyle: .alert)
    let action = UIAlertAction(title: "Filter", style: .default) { (action) in
        
        let text: String = textField.text!
        let filtered = self.sourceArray.filter({$0.Category.contains(text)})
        self.filteredArray = self.filteredArray.isEmpty ? self.sourceArray : filtered
        self.tableview.reloadData()

    }
    alert.addTextField { (alertTextField) in
        alertTextField.placeholder = "Biceps, Chest, Shoulders, etc."
        textField = alertTextField
    }
    alert.addAction(action)
    present(alert, animated: true, completion: nil)
    
}