how to check if a property value exists in array of objects in swift

前端 未结 9 1505
执笔经年
执笔经年 2020-12-13 09:01

I am trying to check if a specific item (value of a property) exists in a array of objects, but could not find out any solution. Please let me know, what i am missing here.<

相关标签:
9条回答
  • 2020-12-13 09:07

    This works fine with me:

    if(contains(objarray){ x in x.id == 1})
    {
         println("1 exists in the array")
    }
    
    0 讨论(0)
  • 2020-12-13 09:08

    signature:

    let booleanValue = 'propertie' in yourArray;
    

    example:

    let yourArray= ['1', '2', '3'];
    
    let contains = '2' in yourArray; => true
    let contains = '4' in yourArray; => false
    
    0 讨论(0)
  • 2020-12-13 09:10

    There are mainly 2 viable options here.

    1. Use the contains(where: method on objarray. I'm just making a minor modification to @TheEye's answer here:
    if objarray.contains(where: { $0.id == 1 }) {
        print("1 exists in the array")
    } else {
        print("1 does not exists in the array")
    }
    
    1. Override the Equatable protocol conformance requirement and just use contains, like this:
    // first conform `Name` to `Equatable`
    extension Name: Equatable {
        static func == (lhs: Name, rhs: Name) -> Bool {
            lhs.id == rhs.id
        }
    }
    // then
    let firstName = Name(id: 1, name: "Different Name")
    if objarray.contains(firstName) {
        print("1 exists in the array") // prints this out although the names are different, because of the override
    } else {
        print("1 does not exists in the array")
    }
    
    0 讨论(0)
  • 2020-12-13 09:17

    You can filter the array like this:

    let results = objarray.filter { $0.id == 1 }
    

    that will return an array of elements matching the condition specified in the closure - in the above case, it will return an array containing all elements having the id property equal to 1.

    Since you need a boolean result, just do a check like:

    let exists = results.isEmpty == false
    

    exists will be true if the filtered array has at least one element

    0 讨论(0)
  • 2020-12-13 09:19

    A small iteration on @Antonio's solution using the , (where) notation:

    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")
    }
    
    0 讨论(0)
  • 2020-12-13 09:26

    In 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")
    }
    
    0 讨论(0)
提交回复
热议问题