Как проверить, существует ли значение свойства в массиве объектов в 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")
        }