Swift 3中的重新加载部分方法是什么?

24

我有一段用Objective C写的代码,我想将其转换为Swift3代码。

[_expandableTableView reloadSections:[NSIndexSet indexSetWithIndex:gestureRecognizer.view.tag] withRowAnimation:UITableViewRowAnimationAutomatic];

我使用在线工具转换后得到以下代码,但它不起作用。

expandableTableView.reloadSections(IndexSet(index: gestureRecognizer.view!.tag), with: .automatic)

请告诉我如何做?


“does not work” 意味着……?错误信息是什么? - Ahmad F
3个回答

50

Swift 3.0中重新加载部分

即重新加载第0部分到第0部分,因为tableview默认有一个部分,其索引为0。

//let myRange: ClosedRange = 0...0

self.tableViewPostComments.reloadSections(IndexSet(integersIn: 0...0), with: UITableViewRowAnimation.top)

对于Swift 4

self.tableViewPostComments.reloadSections(IndexSet(integersIn: 0...0), with: UITableView.RowAnimation.top)

适用于Swift 5

在Swift 5中,您可以使用这个简短而简单的语句。

self.tableViewPostComments.reloadSections(IndexSet(integersIn: 0...0), with: .top)

谢谢您,先生。这对我很有帮助。 - Mandeep Singh

36

要像在 Swift3 中一样做,欲了解更多信息请参见此处


expandableTableView.reloadSections(IndexSet(integer: gestureRecognizer.view!.tag), with: .automatic)

6
请注意,在转换后,NSIndexSet变成了IndexSetIndexSet是Swift对Foundation框架的覆盖,用于NSIndexSet
引用: Swift对Foundation框架的覆盖提供了IndexSet结构,它与NSIndexSet类及其可变子类NSMutableIndexSet相连。 IndexSet值类型提供了与NSIndexSet引用类型相同的功能,两者可以在与Objective-C API交互的Swift代码中互换使用。此行为类似于Swift如何将标准字符串,数字和集合类型桥接到它们对应的Foundation类。
如果您检查reloadSections方法签名的描述,您会注意到它是:
引用: reloadSections(_ sections:IndexSet,with animation:UITableViewRowAnimation sections参数现在是IndexSet而不再是NSIndexSet
所以,你可以做的是:
_expandableTableView.reloadSections(NSIndexSet(index: gestureRecognizer.view.tag) as IndexSet, with: .automatic)

或者我更喜欢在不使用as IndexSet的情况下添加IndexSet:

_expandableTableView.reloadSections(IndexSet(integer: gestureRecognizer.view!.tag), with: .automatic)

困惑。这是否意味着您不能只执行:_expandableTableView.reloadSections([0]), with: .automatic) <-- 这应该仅重新加载第0节。 - mfaani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接