Как узнать, является ли объект последним в массиве (на языке Swift) - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть следующий код в Swift 4.2.1

for myTask in myTasks {
    if myTask === myTasks.last! {
        // Binary operator '===' cannot be applied to two 'Task' operands
    }
}

myTasks.forEach({ myTask in
    if myTask == myTasks.last! {
        // Binary operator '==' cannot be applied to two 'Task' operands
    }
})

, и Xcode показывает ошибку в комментариях.

Что я хочу сделать, это проверить, является ли объект, который повторяется,последний объект в массиве?Как я могу написать это?Спасибо!

1 Ответ

0 голосов
/ 30 декабря 2018

Ваша первая попытка с === потребует, чтобы задачи были классами (=== сравнивает ссылки).Ваша вторая попытка потребует, чтобы задачи были Equatable.Однако, даже если вы реализуете Equatable, не рекомендуется использовать ==, чтобы проверить, является ли задача последней в массиве.

То, что вы хотите сделать, обычно выполняется с использованием индекса:

for (offset, myTask) in myTasks.enumerated() {
   if offset + 1 == myTasks.count {

   }
}

Как правило, это безопаснее, поскольку позволяет избежать проблем, когда один и тот же task появляется в массиве несколько раз.

Другой вариант - разделить код для обоих случаев (может бытьлучший вариант для вас):

for myTask in myTasks.dropLast() {
   // handle all tasks except the last one
}

if let lastTask = myTasks.last {
   // handle last task
}
...