“协议要求功能与类型”是什么意思?

时间:2017-06-20 15:48:33

标签: ios swift delegates

我正在使用委托来传递我存储在函数中的值。每当我尝试将委托实现到我的另一个类时,我得到错误“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不太熟悉,不知道错误是什么。

谢谢, 尼克

1 个答案:

答案 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>)

至于做什么是正确的,你必须根据应用程序中实际应该发生的事情来决定。