在使用Alamofire追加之前,请快速检查对象是否存在

时间:2018-03-27 05:18:54

标签: arrays swift rest

我正在尝试验证来自API的对象是否已存在于我的对象数组中,但我无法进行验证,Xcode一直告诉我这一点

Binary operator '==' cannot be applied to two 'Cidades' operands 

我的代码是:

var cidades = [Cidades]()

    func findAllCidades(completion: @escaping CompletionHandler) {
        Alamofire.request(URL_CIDADESATIVAS, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (response) in

            if response.result.error == nil {
                guard let data = response.data else {return}


                if let json = try? JSON(data: data) {
                    let results = json["results"].array

                    for item in results! {
                        let name = item["nome"].stringValue
                        let estado = item["estado"].stringValue
                        let id = item["id"].intValue

                        let cidade = Cidades(id: id, nome: name, estado: estado)
                        if(!self.cidades.index(where: { $0 == cidade})){
                            self.cidades.append(cidade)
                        }


                    }
                    completion(true)

                }

            } else {
                completion(false)
                debugPrint(response.result.error as Any)
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

您可以检查数组包含的特定值,例如,如果数组包含具有相同cidade的{​​{1}}对象,那么id条件将为真。

if

答案 1 :(得分:1)

cidade不会在self.cidades中编入索引,因为新创建的对象中存在cidade。如果您尝试检查,则需要比较特定值。

let cidade = Cidades(id: id, nome: name, estado: estado)
if self.cidades.contains(where: { $0.id == cidade.id}) {
      self.cidades.append(cidade)
}

希望这会有所帮助。

答案 2 :(得分:1)

可以使用等于运算符(==)

来比较Equatable协议的相等性

在您的模型类中,通过下面的Equatable

代码
extension Cidades : Equatable {
    static func ==(lhs: Cidades, rhs: Cidades) -> Bool {
        return (lhs.nome == rhs.nome && lhs.estado == rhs.estado && lhs.id == rhs.id)
    }

您可以使用自定义Equatable(==)函数

检查对象是否存在
let cidade = Cidades(id: id, nome: name, estado: estado)
        if self.cidades.filter({ c1 in c1 == cidade}).count > 0 {
            // Found
        }else{
            // Not found
        }
}

Here is good resource by Apple

相关问题