Что мне нужно?
Мне нужно вызвать функцию из класса, чтобы закрыть UIView
другого класса, когда происходит событие.У меня есть UIViewController
с UITableView
и другим классом для управления ячейками этого TableView.
Моя проблема, когда я пытаюсь ссылаться на функцию обратного вызова внутри cellForRowAt
: Cannot assign value of type '()' to type '(() -> ())?'
.Я хочу вызвать этот обратный вызов для метода viewDidDisappear
.
Код
class ViewControllerRelatorios : UIViewController, UITableViewDataSource, UITableViewDelegate {
var closeCellPopup : (()->())? // Ref
@IBOutlet weak var tableViewContent: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableViewContent.dataSource = self
self.tableViewContent.delegate = self
}
override func viewDidDisappear(_ animated: Bool) {
if closeCellPopup != nil {
closeCellPopup!() // Here OK
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell2 = tableView.dequeueReusableCell(withIdentifier: "cellDailyReport") as! CellDailyReport
self.closeCellPopup = cell2.closePopup // Error: Cannot assign value of type '()' to type '(() -> ())?'
return cell2
}
}
class CellDailyReport : UITableViewCell {
var lastView = UIView()
var closePopup : () {
self.lastView.removeFromSuperview()
}
}
Если я изменю объявление var closeCellPopup : (()->())?
на var closeCellPopup : ()?
, я не смогувызвать эту функцию.
override func viewDidDisappear(_ animated: Bool) {
if closeCellPopup != nil {
closeCellPopup!() // Cannot call value of non-function type '()'
}
}