Swift - 委托 - 如何 link 实现委托方法的协议?
Swift - Delegates - How do I link the protocol to the implemented delegate methods?
我想使用委托让我的单元格(来自 UICollectionView)与我的 ViewController 通信。
在我的 Cell.swift 文件中,我像这样声明所需的协议(在 Cell class 之外):
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 ...
}
}
问题:我无法 link 协议及其实现,协议中的 cmd + click
无处可寻。在我的 @IBAction
中,someMethod
没有崩溃,但它什么也没做。
我看到 this topic 关于这个主题,但我不明白在哪里实施第 6 步。
你能帮帮我吗?
感谢您的宝贵时间。
您错过了最后一步:填充 Cell
class 的 delegate
属性。我通常在 cellForRowAtIndexPath
:
中这样做
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.table.dequeueReusableCellWithIdentifier("myCellId") as! Cell
cell.delegate = self
...
return cell
}
请注意,在使用委托时没有 魔法 或自动行为:
- 代表是一个协议(您的
CellDelegate
协议)
- 您在 class 中实现了协议 您想要响应委托调用(您在
ViewController
class 中做了)
- 您在调用委托方法的 class 中创建了一个委托 属性(您在
Cell
class 中创建了委托)
- 您使用 class
的实际实例初始化委托 属性
您刚刚错过了最后一步,使 属性 未初始化,因此任何使用可选链接的调用都计算为 nil
(就像您在 someAction
方法中所做的那样),并且没有任何结果发生了。
我想使用委托让我的单元格(来自 UICollectionView)与我的 ViewController 通信。
在我的 Cell.swift 文件中,我像这样声明所需的协议(在 Cell class 之外):
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 ...
}
}
问题:我无法 link 协议及其实现,协议中的 cmd + click
无处可寻。在我的 @IBAction
中,someMethod
没有崩溃,但它什么也没做。
我看到 this topic 关于这个主题,但我不明白在哪里实施第 6 步。
你能帮帮我吗?
感谢您的宝贵时间。
您错过了最后一步:填充 Cell
class 的 delegate
属性。我通常在 cellForRowAtIndexPath
:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.table.dequeueReusableCellWithIdentifier("myCellId") as! Cell
cell.delegate = self
...
return cell
}
请注意,在使用委托时没有 魔法 或自动行为:
- 代表是一个协议(您的
CellDelegate
协议) - 您在 class 中实现了协议 您想要响应委托调用(您在
ViewController
class 中做了) - 您在调用委托方法的 class 中创建了一个委托 属性(您在
Cell
class 中创建了委托) - 您使用 class 的实际实例初始化委托 属性
您刚刚错过了最后一步,使 属性 未初始化,因此任何使用可选链接的调用都计算为 nil
(就像您在 someAction
方法中所做的那样),并且没有任何结果发生了。