我正在尝试验证来自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)
}
}
}
答案 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
}
}