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
}
}