我正在通过委托传递函数中存在的变量。在大多数情况下,一切似乎都有效。我唯一无法弄清楚的是如何设置委托,例如它应该是"foo".delegate = self
通常情况下这很简单,但由于我正在使用函数而不是类中的变量,我不知道foo
会是什么(请原谅术语,我需要一个占位符)
供您参考
以下是协议:
protocol TagToIndexDelegate {
func finishPassing (dictionary:Dictionary<Int,Int>)
}
以下是我尝试从以下位置发送变量的函数:
extension MyCell: YSSegmentedControlDelegate {
func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) {
tagToIndex[actionButton.tag] = index
delegate?.finishPassing(dictionary: tagToIndex)
}
func segmentedControl(_ segmentedControl: YSSegmentedControl, didPressItemAt index: Int) {
}}
delegate
的类型为TagToIndexDelegate
,而tagToIndex
中存在的变量willPressItemAt
是我传递的数据。
最后,我正在尝试实施TagToIndexDelegate
class AnswerViewController: UIViewController, TagToIndexDelegate {
func finishPassing (dictionary: Dictionary <Int, Int>)
{
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
我非常擅长使用代表,因此非常感谢任何帮助或批评。
谢谢,
尼克
答案 0 :(得分:0)
假设AnswerViewController
是包含表格视图和问题中引用的单元格的视图控制器,它可能也是表格视图数据源。
您正在创建UITableViewDataSource
个实例的MyCell
实施可能看起来像这样:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let aCell = tableView.dequeueReusableCell(withIdentifier: "my_cell_reuse_id") as! MyCell
return aCell
}
您只需将代理设置为self
:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let aCell = tableView.dequeueReusableCell(withIdentifier: "my_cell_reuse_id") as! MyCell
aCell.delegate = self
return aCell
}
请注意,我假设delegate
属于MyCell
的属性:
class MyCell: UITableViewCell {
var delegate: TagToIndexDelegate?
}