我有一个用于iOS应用的快速代码。
我正在使用tableView,以便向左滑动,以便删除用户保存的位置列表。
带有问号的部分是关键公园,我不知道该放什么,或者哪里出了错...
提前谢谢
import UIKit
import UserNotifications
class PlacesTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(newLocationAdded(_:)),
name: .newLocationSaved,
object: nil)
}
@objc func newLocationAdded(_ notification: Notification) {
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return LocationsStorage.shared.locations.count
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete{
???.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PlaceCell", for: indexPath)
let location = LocationsStorage.shared.locations[indexPath.row]
cell.textLabel?.numberOfLines = 2
cell.textLabel?.text = location.description
cell.detailTextLabel?.text = location.dateString
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 110
}
}
答案 0 :(得分:0)
假设LocationsStorage.shared.locations
是一个数组,可以使用LocationsStorage.shared.locations.remove(at: indexPath.row)
。如果您遇到此问题,请指定您遇到的错误,以便我进一步提供帮助
LocationsStorage.shared.locations.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
另一方面,还要确保在通过执行多次插入/删除操作修改tableView时添加beginUpdates
和endUpdates
。
编辑:-
由于您收到“无法在不可变值上使用变异成员:'位置'setter无法访问”,这显然意味着您拥有对该数组的只读访问权限,因此您有两个选择。
1)转到单例类(LocationsStorage类),然后更改locations
集合以使其可变。 (您可能/不想这样做。但是,如果需要通过tableView修改单例的数组,则别无选择)
2)如果您真的不需要修改单例类的数组,则可以在处理tableView的类上拥有自己的本地集合,例如var myLocationArray = LocationsStorage.shared.locations
并将该数组用作您的数据源
答案 1 :(得分:0)
由于LocationsStorage.shared.locations
是数据源数组,只需替换????
if editingStyle == .delete{
LocationsStorage.shared.locations.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
}
答案 2 :(得分:-1)
对于我所看到的,您必须从
中删除LocationsStorage.shared.locations
代码的下一部分看起来不错,然后您只需执行
tableView.reloadData()
再次查看表中反映的更改。