Как проверить, существует ли значение свойства в массиве объектов в swift
Я пытаюсь проверить, существует ли конкретный элемент (значение свойства) в массиве объектов, но не может найти какое-либо решение. Пожалуйста, дайте мне знать, что мне здесь не хватает.
class Name {
var id : Int
var name : String
init(id:Int, name:String){
self.id = id
self.name = name
}
}
var objarray = [Name]()
objarray.append(Name(id: 1, name: "Nuibb"))
objarray.append(Name(id: 2, name: "Smith"))
objarray.append(Name(id: 3, name: "Pollock"))
objarray.append(Name(id: 4, name: "James"))
objarray.append(Name(id: 5, name: "Farni"))
objarray.append(Name(id: 6, name: "Kuni"))
if contains(objarray["id"], 1) {
println("1 exists in the array")
}else{
println("1 does not exists in the array")
}
Ответы
Ответ 1
Вы можете фильтровать массив следующим образом:
let results = objarray.filter { $0.id == 1 }
который вернет массив элементов, соответствующих условию, указанному в замыкании, - в приведенном выше случае он вернет массив, содержащий все элементы, имеющие свойство id
, равное 1.
Поскольку вам нужен логический результат, просто выполните проверку:
let exists = results.isEmpty == false
exists
будет истинным, если в фильтрованном массиве имеется хотя бы один элемент
Ответ 2
В Swift 2.x:
if objarray.contains({ name in name.id == 1 }) {
print("1 exists in the array")
} else {
print("1 does not exists in the array")
}
Ответ 3
В Swift 3:
if objarray.contains(where: { name in name.id == 1 }) {
print("1 exists in the array")
} else {
print("1 does not exists in the array")
}
Ответ 4
Это отлично работает со мной:
if(contains(objarray){ x in x.id == 1})
{
println("1 exists in the array")
}
Ответ 5
Небольшая итерация в решении @Antonio с использованием обозначения ,
(where
):
if let results = objarray.filter({ $0.id == 1 }), results.count > 0 {
print("1 exists in the array")
} else {
print("1 does not exists in the array")
}
Ответ 6
Я пошел с этим решением к аналогичной проблеме. Использование contains возвращает логическое значение.
var myVar = "James"
if myArray.contains(myVar) {
print("present")
}
else {
print("no present")
}