Ios 如何在swift中使用textfield对两个数组进行排序并将其添加到第三个数组

Ios 如何在swift中使用textfield对两个数组进行排序并将其添加到第三个数组,ios,arrays,swift,uitextfield,Ios,Arrays,Swift,Uitextfield,我是swift的新手,我面临着一个接一个的搜索问题。我试过这个密码 let appln_id = "800016" let result = (dict["listAarry"] as? [[String:Any]])?.filter({ ($0["appln_id"] as? String) == appln_id }) 但我想在文本字段中搜索它 func textField(_ textField: UITextField, shouldChangeCharactersIn range:

我是swift的新手,我面临着一个接一个的搜索问题。我试过这个密码

let appln_id = "800016"

let result = (dict["listAarry"] as? [[String:Any]])?.filter({ ($0["appln_id"] as? String) == appln_id })
但我想在文本字段中搜索它

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{


    if textField == txtSearch{
        let certificationId = txtSearch.text //"800016"

        let result = (searchdict["listAarry"] as? [[String:Any]])?.filter({ ($0["appln_id"] as? String) == certificationId })
    }

    return true
}

因此,您当前正在调用文本字段中的
shouldchangeCharacters的委托函数。但是,您要做的是调用:

@objc func textFieldValueChanged(_ textField: UITextField)
以及:

searchTextField.addTarget(self,action:#选择器(textFieldValueChanged),for:.editingChanged)

在valueChanged方法中,您应该进行筛选,但要进行一些小的编辑,然后将其放入
tableView的
数据源中,然后运行
tableView.reloadData()


结果将根据搜索词进行赋值。

我太愚蠢了,我只需要使用contains而不是contains==

txtSearch.addTarget(self, action: #selector(AdmissionReportVC.textFieldDidChange(_:)), for: UIControl.Event.editingChanged)

 @objc func textFieldDidChange(_ textField: UITextField) { 
     var certificationId = String()
     certificationId =  txtSearch.text ?? ""
     print(certificationId)
     let result = (searchdict["listAarry"] as? [[String:Any]])?.filter({ 
     (($0["appln_id"] as? String)?.contains(certificationId) ?? false)})
     print("Result = ",result as Any
     SearchAny = result!
     tblView.reloadData()
 }

因此,目前您有一个包含一系列字典的字典,您只需要与
appln_id
800016
?@800016是的,但一个接一个,就像我在textfield中输入8一样,那么它将显示所有带有8的值,然后与0相同,直到800016。那么您想在列表中查看您的搜索结果吗?假设键入“8”时有6个结果?只需向uicontrol事件
的txtSearch文本字段添加一个目标。使用选择器编辑更改的
即可更新您的结果list@Vollan是的,我明白。但是我想一个接一个地过滤我的代码给出的结果只有当它等于时。我怎么能用名称区分大小写进行相同的搜索?@Muju不确定要检查哪个参数,但两个比较都应该是
。小写()
是的,这项更改有效吗。但是如果用户点击大写的按钮,它会再次变为超级用例,我们能做些什么来防止吗?@Muju你应该在te dictionary数组中仍然有这个值?如果你没有,那么你必须把它保存在本地某个地方。。。因为在添加上述代码后,无法反转结果数组中的小写()值,所以结果数组中没有任何内容。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let previousText:NSString = textField.text! as NSString
    let updatedText = previousText.replacingCharacters(in: range, with: string)
    let result = dict.filter { (dict) -> Bool in
        if let app_id = dict["appln_id"] as? String {
            return app_id.contains(updatedText)
        }
        return false
    }

    return true
}
txtSearch.addTarget(self, action: #selector(AdmissionReportVC.textFieldDidChange(_:)), for: UIControl.Event.editingChanged)

 @objc func textFieldDidChange(_ textField: UITextField) { 
     var certificationId = String()
     certificationId =  txtSearch.text ?? ""
     print(certificationId)
     let result = (searchdict["listAarry"] as? [[String:Any]])?.filter({ 
     (($0["appln_id"] as? String)?.contains(certificationId) ?? false)})
     print("Result = ",result as Any
     SearchAny = result!
     tblView.reloadData()
 }