从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,删除的行将突然消失,而不是被动画化。