从UITableView – Swift中删除行的正确方法是什么?

在Objective-C中,我从tableView中删除一行时使用了以下代码,它工作得很好。

Objective-C示例

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { [self.arrayName removeObjectAtIndex:indexPath.row]; [self.tableName reloadData]; } 

我最近搜索了一下在Swift中是如何完成的,我注意到我发现的大多数代码都与我之前使用的代码不同。

Swift示例

 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == UITableViewCellEditingStyle.Delete { numbers.removeAtIndex(indexPath.row) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) } } 

所以现在问题是,我做错了还是两种方式都可以?

两种语言(Swift或Objective-C)的正确方法是什么?

Objective-C代码有效,但实际上并不是正确的方法。 它应该就像您发布的示例Swift代码一样。

无论语言如何,检查编辑样式都是可选的。 这取决于您的表视图支持的内容。 如果您只删除并且不支持插入,则validation编辑样式参数几乎没有任何好处。 当然,检查更安全,以防您稍后添加插入。

在删除单行时在表上使用reloadData只是效率低下,可能是一个糟糕的用户体验。

tl; dr – Objective-C代码有效,但远非理想。 Swift代码整体上要好得多。

使用deleteRowAtIndexPaths是正确的方法。 如果只是重新加载tableview,删除的行将突然消失,而不是被动画化。