Ios 协议和代理帮助?值为';我不能回头

Ios 协议和代理帮助?值为';我不能回头,ios,swift,cocoa-touch,delegates,protocols,Ios,Swift,Cocoa Touch,Delegates,Protocols,我的EditorViewController与我的ModalViewController连接,在ModalViewController中,我必须在视图关闭后将一些数据传递回EditorViewController。我看过很多关于代理和协议的教程,我相信这就是我要传递这些信息所必须做的,但是我似乎不能正确地理解代码,尽管我已经完全按照教程进行了学习。如果有人能看到这里出了什么问题,我将不胜感激。我会把密码寄出去 协议 protocol passColorBackDelegate { fun

我的
EditorViewController
与我的
ModalViewController
连接,在ModalViewController中,我必须在视图关闭后将一些数据传递回EditorViewController。我看过很多关于代理和协议的教程,我相信这就是我要传递这些信息所必须做的,但是我似乎不能正确地理解代码,尽管我已经完全按照教程进行了学习。如果有人能看到这里出了什么问题,我将不胜感激。我会把密码寄出去

协议

protocol passColorBackDelegate {
    func colorToChange(_ color: String)
}
第一视图控制器

class EditorViewController: UIViewController, passColorBackDelegate {

    func colorToChange(_ color: String) {
    print("Hello")
}    
第二个视图控制器文件(包含要传递回第一个的数据的文件)中还有另一个类,我对文件很吝啬

class subView: UIView {

}

class ModalViewController: UIViewController {

var delegate: passColorBackDelegate?

@IBAction func changeColor(_ sender: UIButton) {
    switch sender {
    case blueColorButton: colorToChangeTo = "Blue"
    case redColorButton: colorToChangeTo = "Red"
    case greenColorButton: colorToChangeTo = "Green"
    case purpColorButton: colorToChangeTo = "Purple"
    default: print("error")
    }
    print(colorToChangeTo)
    delegate?.colorToChange(colorToChangeTo)
    self.dismiss(animated: true, completion: nil)
}

正如您所看到的,我的协议函数还没有包含我需要传回的任何数据,但是消息仍然没有打印,这意味着函数没有被调用。如果有人能告诉我我做错了什么,我将不胜感激。谢谢

您需要在执行该步骤之前设置代理。因为听起来像是在使用故事板,所以可以在
prepare(for segue)
中完成:


此外,正如Paul在评论中提到的,将协议(
PassColorBackProtocol
)和类(
SubView
)大写是Swift中的常规样式,有助于其他人理解您的代码。

您在继续之前是否设置了代理?您需要执行以下操作:
modalViewController.delegate=self
。我将把这行代码放在哪里?在
viewDidLoad()
prepare(for segue)
中?它似乎不喜欢在
viewDidLoad()
Update中使用它:我试图将它放在
prepare(for segue)
中,但它也给了我一个错误。这几乎就像我的ModalViewController不识别
var
FYI一样。您的协议应该是
PassColorBackDelegate
-协议以大写开头,结构和类也是如此。哦,好的,谢谢,我会更改的谢谢!这样做了,我也将确保我的类和协议资本化!谢谢你指出这一点
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destinationVC = segue.destination as? ModalViewController {
        destinationVC.delegate = self
    }
}