我正在使用Alamofire获取JSON响应来填充TableView。现在我需要过滤接收的数据,将一些字段与TextField文本进行比较,例如" nombre"使用texto_buscado.text
这是加载TableView的函数:
public func cargarDatos_filtrados (){
//fetching data from web api
Alamofire.request(URL_GET_DATA).responseJSON { response in
self.directorios.removeAll()
//getting json
if let json = response.result.value {
print (json)
//converting json to NSArray
let directorioArray : NSArray = json as! NSArray
//traversing through all elements of the array
for i in 0..<directorioArray.count{
let nom = (directorioArray[i] as AnyObject).value(forKey: "nombre")
if (nom == texto_buscado.text){
//DO SOMETHING
}
self.directorios.append(DirectorioCompleto(
nombre: (directorioArray[i] as AnyObject).value(forKey: "nombre") as? String,
apellidos: (directorioArray[i] as AnyObject).value(forKey: "apellidos") as? String,
apodo: (directorioArray[i] as AnyObject).value(forKey: "apodo") as? String,
cumple: (directorioArray[i] as AnyObject).value(forKey: "cumple") as? String,
conyuge: (directorioArray[i] as AnyObject).value(forKey: "conyuge") as? String,
cumple_conyuge: (directorioArray[i] as AnyObject).value(forKey: "cumple_conyuge") as? String,
aniversario_bodas: (directorioArray[i] as AnyObject).value(forKey: "aniversario_bodas") as? String,
empresa: (directorioArray[i] as AnyObject).value(forKey: "empresa") as? String,
direccion_empresa: (directorioArray[i] as AnyObject).value(forKey: "direccion_empresa") as? String,
tel_negocio: (directorioArray[i] as AnyObject).value(forKey: "tel_negocio") as? String,
fecha_ingreso: (directorioArray[i] as AnyObject).value(forKey: "fecha_ingreso") as? String,
num_rotario: (directorioArray[i] as AnyObject).value(forKey: "num_rotario") as? String,
padrino: (directorioArray[i] as AnyObject).value(forKey: "padrino") as? String,
direccion_casa: (directorioArray[i] as AnyObject).value(forKey: "direccion_casa") as? String,
tel_casa: (directorioArray[i] as AnyObject).value(forKey: "tel_casa") as? String,
celular: (directorioArray[i] as AnyObject).value(forKey: "celular") as? String,
email: (directorioArray[i] as AnyObject).value(forKey: "email") as? String,
email_privado: (directorioArray[i] as AnyObject).value(forKey: "email_privado") as? String,
clasificacion: (directorioArray[i] as AnyObject).value(forKey: "clasificacion") as? String,
imagen: (directorioArray[i] as AnyObject).value(forKey: "imagen") as? String
))
}
}
//displaying data in tableview
self.tableView.reloadData()
}
}
但我收到以下警告信息:
二元运算符&#39; ==&#39;不能应用于任何类型的操作数?&#39;和&#39;字符串?&#39;
在第
行if (nom == texto_buscado.text){
//DO SOMETHING
}
答案 0 :(得分:3)
有很多方法可以改进您的代码。
NSArray
。AnyObject
。directorioArray[i] as AnyObject
。value(forKey:)
从字典中获取值。使用正确的Swift类型。使用变量来保存重复的值。
由于您的数据似乎是包含字符串键和字符串值的字典数组,因此您可以按如下方式更新代码:
public func cargarDatos_filtrados (){
//fetching data from web api
Alamofire.request(URL_GET_DATA).responseJSON { response in
self.directorios.removeAll()
//getting json
if let json = response.result.value as? [[String:String]] {
print (json)
//traversing through all elements of the array
for dict in json {
let nom = dict["nombre"]
if (nom == texto_buscado.text){
//DO SOMETHING
}
self.directorios.append(DirectorioCompleto(
nombre: dict["nombre"],
apellidos: dict["apellidos"],
apodo: dict["apodo"],
cumple: dict["cumple"],
conyuge: dict["conyuge"],
cumple_conyuge: dict["cumple_conyuge"],
aniversario_bodas: dict["aniversario_bodas"],
empresa: dict["empresa"],
direccion_empresa: dict["direccion_empresa"],
tel_negocio: dict["tel_negocio"],
fecha_ingreso: dict["fecha_ingreso"],
num_rotario: dict["num_rotario"],
padrino: dict["padrino"],
direccion_casa: dict["direccion_casa"],
tel_casa: dict["tel_casa"],
celular: dict["celular"],
email: dict["email"],
email_privado: dict["email_privado"],
clasificacion: dict["clasificacion"],
imagen: dict["imagen"]
))
}
}
//displaying data in tableview
self.tableView.reloadData()
}
}