我正在使用 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()
}
}
但我收到以下警告消息:
Binary operator '==' cannot be applied to operands of type 'Any?' and 'String?'
在线
if (nom == texto_buscado.text){
//DO SOMETHING
}
最佳答案
有很多方法可以改进您的代码。
- 不要在 Swift 中使用
NSArray
。 - 不要使用
AnyObject
。 - 不要多次重复
directorioArray[i] as AnyObject
。 - 不要使用
value(forKey:)
从字典中获取值。
使用正确的 Swift 类型。使用变量来保存重复的值。
由于您的数据看起来是一个包含 String 键和 String 值的字典数组,您可以按如下方式更新代码:
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()
}
}
关于json - 试图比较任何?带字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917664/