Home > Enterprise >  Swift how to remove elements from an array of enums?
Swift how to remove elements from an array of enums?

Time:11-16

I have an array of enums and I'd like to remove x number of elements from it, the code below is what I'm trying to achieve, it partially works because it removes elements only from the more variable created in the switch-case but the original array doesn't change

MyArray of enums

  • Contacts
  • More

if more is present it means there are more contacts to download, when the user tap on a button it should remove ids that has been downloaded

Here is an example:

// Switch last element of my array
switch model.myArray[model.myArray.count-1]  {

// If last element is More type
case var more as More:
    
    // Download new contacts
    downloadfunction()

    // Remove 100 contacts that has been downloaded
    let range = 0...99
    more.peopleIds?.removeSubrange(range)

}

More structure

public struct More: Decodable, Identifiable {

    public let id: String?
    public var peopleIds: [String]?

CodePudding user response:

I think the best way to check the type of the last element of the array is to cast it using an if var ...

if var more = model.myArray.last as? More {

and then change it and replace the old value in the array

if var more = myArray.last as? More, let array = more.peopleIds {
    more.peopleIds = Array(array.dropFirst(100))
    myArray[myArray.endIndex - 1] = more
}

CodePudding user response:

You want to change the original value. enums are not a reference type, so you can't change more and expect it to change the element in model.myArray.

Fixed code:

// Switch last element of my array
switch model.myArray.last! {

// If last element is More type
case is More:
    // Download new contacts
    downloadfunction()

    // Remove 100 contacts that has been downloaded
    let range = 0...99
    model.myArray[model.myArray.count - 1].peopleIds?.removeSubrange(range)
}
  • Related