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 对象

android - Moshi:平台类 BigDecimal 的问题

c# - IEnumerable C# 对象到具有名称的数组的 JSON 对象

c# - 从JSON返回的字符串中删除双引号

ios - 引用另一个 UIViewController 导致一个 nil 指针并创建一个新对象

javascript - jQuery getJSON 无法看到 console.log

ios - SwiftUI/iOS |在没有 NSNotification 的情况下获取键盘大小

swift - 在 Swift 中对我自己的 ViewController 进行单元测试时使用未声明的类型 'ViewController'?

ios - Objective C 到 Swift 的转换(协议(protocol))

ios - 连接到 SSID 时 Swift 密码短语无效