Remove custom object from array (Swift)

I have an array with a name remindersArraythat contains a custom object with a name Reminder(each Reminderobject has titleand identifier).

Inside ReminderI have a static pleasure called removeReminderWithIdentifierthat should find a reminder and remove it from the array.

I tried to do it like this:

static func removeReminderWithIdentifier(reminderIdentifier: String) {
    for currentReminder in Reminder.remindersArray {
        if currentReminder.identifier == reminderIdentifier {
            Reminder.remindersArray.removeAtIndex(Reminder.remindersArray.indexOf(currentReminder)) //Compile error
        }
    }
}

but it gives me this compilation error:

Cannot convert value of type 'Reminder' to expected argument type '@noescape (Reminder) throws -> Bool'

Any idea how I can remove this object with this id from the array?

Thank!

+4
source share
2 answers

See the header of the two methods indexOf(_:)for CollectionType:

extension CollectionType where Generator.Element : Equatable {
    /// Returns the first index where `value` appears in `self` or `nil` if
    /// `value` is not found.
    ///
    /// - Complexity: O(`self.count`).
    @warn_unused_result
    public func indexOf(element: Self.Generator.Element) -> Self.Index?
}

extension CollectionType {
    /// Returns the first index where `predicate` returns `true` for the
    /// corresponding value, or `nil` if such value is not found.
    ///
    /// - Complexity: O(`self.count`).
    @warn_unused_result
    public func indexOf(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Self.Index?
}

indexOf(_:) ( ), Equatable. Reminder Equatable, Swift indexOf(_:), , @noescape (Self.Generator.Element) throws -> Bool . Self.Generator.Element Reminder.

, - Reminder Equatable.

extension Reminder: Equatable {}
func == (lhs: Reminder, rhs: Reminder) -> Bool {
    return lhs.identifier == rhs.identifier /* && ... you may need more complex condition. */
    /* return lhs === rhs //or simple use `===`. */
}

:

reminderArray identifier, - , Reminder Equatable:

static func removeReminderWithIdentifier(reminderIdentifier: String) {
    if let index = Reminder.remindersArray.indexOf({$0.identifier == reminderIdentifier}) {
        Reminder.remindersArray.removeAtIndex(index)
    }
}

remindersArray Reminder identifier, :

static func removeReminderWithIdentifier3(reminderIdentifier: String) {
    Reminder.remindersArray = Reminder.remindersArray.filter{$0.identifier != reminderIdentifier}
}

( ?) .

+2

:

static func removeReminderWithIdentifier(reminderIdentifier: String) {
    Reminder.remindersArray = Reminder.remindersArray.filter { $0.identifier != reminderIdentifier }
}

:

func removeReminderWithIdentifier(reminderIdentifier: String) {
    remindersArray = remindersArray.filter { $0.identifier != reminderIdentifier }
}

...:

func removeReminders(with identifier: String) {
    remindersArray = remindersArray.filter { $0.identifier != identifier }
}
0

Source: https://habr.com/ru/post/1653512/


All Articles