Я пытаюсь использовать библиотеку MGSwipeTableCell для создания пользовательской ячейки смахивания. Однако cell.delegate = self
продолжает выдавать мне ошибку, говоря, что
"Cannot assign value of type 'AlarmTableViewController' to type 'MGSwipeTableCellDelegate?'"
но даже если я вставлю 'as! MGSwipeTableCellDelegate' делает фатальную ошибку:
unexpectedly found nil while unwrapping an Optional value.
class AlarmTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let reuseIdentifier = "programmaticCell"
var cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! MGSwipeTableCell
cell.textLabel!.text = "Title"
cell.delegate = self as! MGSwipeTableCellDelegate //optional
return cell
}
}
В своей раскадровке я установил пользовательский класс ячейки как MGSwipeTableCell
и его идентификатор как programmaticCell
. Помогите пожалуйста мне. tableView
сводит меня с ума.
Вам нужно добавить MGSwipeTableCellDelegate
делегата для вашего класса.
class AlarmTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MGSwipeTableCellDelegate
и причина вашего сбоя - принудительное as!
преобразование, хотя оно равно нулю.
Я согласен с ответом @TheTiger. Но я бы также рассмотрел этот вариант, который заключается в использовании расширения, а не в добавлении его в основные скобки.
extension SomeType: SomeProtocol, AnotherProtocol {
// implementation of protocol requirements goes here
}
Или в вашем случае это будет
extension AlarmTableViewController: MGSwipeTableCellViewDelegate {
//and then you can add all the methods here if any
}
Это немного лучше, потому что вы можете объединить все методы более понятным способом. Разделив его по разным делегациям, будет лучше, когда вы вернетесь и вам нужно будет что-то изменить.
Немного чтения, если вам интересно: https://docs.swift.org/swift-book/LanguageGuide/Extensions.html
Кроме того, если это неясно, вы добавляете любой файл, но было бы лучше добавить его в конец вашего файла с помощью AlarmTableViewController
.