捕获功能中的快速关闭值

时间:2018-08-17 08:30:27

标签: swift closures

也许这很简单,但我无法弄清楚。

请让我知道这是否正确

在我的tableview单元格中,我有以下关闭项

public var btnBulbTappedClo:((CommentCell) -> (Void))?

我称之为

@IBAction func btnBulbTapped(_ sender: Any) {
    self.btnBulbTappedClo?(self)
}

在我的视图控制器中,cellForRow方法

我调用func btnBulbTapped,并按单元格返回了闭包

self.btnBulbTapped(cell.btnBulbTapped)

代码可以正确编译,但是我不知道如何访问单元格?

 func btnBulbTapped (_ clou :((CommentCell) -> Void)?) {
        // how to access `CommentCell`   object here
  }

1 个答案:

答案 0 :(得分:0)

我觉得您没有正确使用此功能,如果您了解您有一个定义UITableViewCell的{​​{1}}子类,则应在点击此单元格内部的按钮时调用闭包。

不确定public var btnBulbTappedClo:((CommentCell) -> (Void))?函数的作用。您将这样使用:

func btnBulbTapped

根据您在评论中的问题,您有2个选择:

1)只需从给定的闭包中调用一个函数

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //..dequeue your cell
    cell.btnBulbTapped = {commentCell in 
        //here you have access to comment Cell inside of a closure
    }
}

2)定义协议

cell.btnBulbTapped = {[weak self] commentCell in 
    self?.btnPressed(commentCell)
}

func btnPressed(_ cell: CommentCell) {
    //do whats needed here with the cell
}

将委托变量添加到您的protocol CommentCellDelegate { func didSelectCell(_ cell: CommentCell) } 类中,并通过CommentCell方法调用该委托:

IBAction

将您的weak var commentDelegate: CommentCellDelegate? @IBAction func btnBulbTapped(_ sender: Any) { commentDelegate.didSelectCell(self) } //to be sure set delegate to nil in prepareForReuse inside your cell subclass override func prepareForReuse() { super.prepareForReuse() commentDelegate = nil } 委托给每个单元格

controller