如何确定对象是否是数组中的最后一个对象(使用Swift语言)

ike*_*8me -1 arrays swift swift4 swift4.2

我在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
    }
})
Run Code Online (Sandbox Code Playgroud)

和Xcode在评论中显示错误.

我想要做的是测试迭代的对象是否是数组中的最后一个对象?我该如何编码呢?谢谢!

Sul*_*han 5

您的第一次尝试===将要求任务成为类(===比较引用).你的第二次尝试需要完成任务Equatable.但是,即使您实现Equatable,使用它==来检查任务是否是数组中的最后一个也不是一个好主意.

你想要做的通常是使用索引完成的:

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

   }
}
Run Code Online (Sandbox Code Playgroud)

这通常更安全,因为它可以防止task在阵列中多次出现问题时出现问题.

另一种选择是为两种情况分开代码(可能不是最适合您的选择):

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

if let lastTask = myTasks.last {
   // handle last task
}
Run Code Online (Sandbox Code Playgroud)