我正在使用委托来传递我存储在函数中的值。每当我尝试将委托实现到我的另一个类时,我得到错误“AnswerViewController”不符合协议“TagToIndex Delegate”。扩展后,错误产生:
协议要求函数'finishPassing(dictionary :)'类型'(字典) - >()'你想添加存根吗?
以下是协议:
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 {
override func viewDidLoad() {
super.viewDidLoad()
}
}
我觉得我已经犯了一些基本错误,但我对Swift不太熟悉,不知道错误是什么。
谢谢, 尼克
答案 0 :(得分:1)
您已定义协议TagToIndexDelegate
,需要实施方法finishPassing (dictionary:Dictionary<Int,Int>)
。然后,您说您的AnswerViewController
类符合TagToIndexDelegate
,但您实际上从未实际执行所需的方法。该类需要实现所需的方法以满足一致性。
您可以根据错误建议添加存根:
func finishPassing (dictionary:Dictionary<Int,Int>)
{
// logic here
}
你也可以通过在它前面添加optional
来将协议功能声明更改为可选:
optional func finishPassing (dictionary:Dictionary<Int,Int>)
至于做什么是正确的,你必须根据应用程序中实际应该发生的事情来决定。