json - 试图比较任何?带字符串

标签 json swift

我正在使用 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/

相关文章:

php - 如何使用 PHP 将 JSON 数据记录到文件?

java - 将 JSON 传递给 WebService

python - 如何序列化其成员不可直接序列化但其 str() 表示可序列化的对象?

ios - 增加 SwiftUI 中选项卡栏项目图标的大小

ios - 稍后在应用程序中使用 prepareForSegue 将数据传递给 ViewController

swift - UI 测试包标识符和代码覆盖率

javascript - 将 JSON trim 为给定目标并获取所有父键

javascript - 调用网站并获取 JSON 信息

swift - 如何在应用程序中搜索用户? (最具成本效益的方式)在 Firebase 中

ios - 如何使用 Sqlite.swift 获取列名列表?