我想使用委托让我的单元格(来自UICollectionView)与我的ViewController进行通信。
在我的Cell.swift文件中,我声明所需的协议(在Cell类之外):
protocol CellDelegate: class {
func someMethod(param1: String?, param2 param2: Bool)
}
在同一个文件中,我按如下方式声明代理:
class Cell: UICollectionViewCell {
weak var delegate: CellDelegate?
// ... some code ...
@IBAction func someAction(sender: AnyObject) {
delegate?.someMethod(param1, param2: true)
}
}
现在在我的ViewController中,我正在实现someMethod
:
extension ViewController: CellDelegate {
func someMethod(param1: String?, param2 param2: Bool) {
// ... some code ...
}
}
问题:我无法将协议与其实现相关联,协议中的cmd + click
无处可寻。在我的@IBAction
中,someMethod
没有崩溃,但它什么也没做。
我看到this topic关于这个主题,但我不明白在哪里实施第6步。
你能帮助我吗?
感谢您的时间。
答案 0 :(得分:2)
您错过了最后一步:填充delegate
类的Cell
属性。我通常在cellForRowAtIndexPath
中执行此操作:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.table.dequeueReusableCellWithIdentifier("myCellId") as! Cell
cell.delegate = self
...
return cell
}
请注意,使用委托时没有 magic 或自动行为:
CellDelegate
协议)ViewController
类中执行过)Cell
类中执行过)您错过了最后一步,让该属性保持未初始化状态,因此使用可选链接的任何调用都会计算为nil
(就像您在someAction
方法中所做的那样),并且没有任何反应。