如何在UIViewControllers与协议/委托之间传递数据

fs_*_*gre 5 delegates protocols pass-data ios swift

在下面的代码中,我有一个ViewController("SenderViewController"),ViewController当点击一个按钮时,它会将消息传递给main .我不完全理解的是messageData()主要方法如何ViewController知道何时收听消息.

有人可以解释一下主要触发messageData()方法的原因是什么ViewController?

SenderViewController:

import UIKit  
protocol SenderViewControllerDelegate {  
    func messageData(data: AnyObject)  
}  
class SenderViewController: UIViewController {  
    @IBOutlet weak var inputMessage: UITextField!  
     var delegate: SenderViewControllerDelegate?  

    @IBAction func sendData(sender: AnyObject) {  
        /  
        if inputMessage.text != ""{  
            self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)  
            self.delegate?.messageData(inputMessage.text!)  
        }  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

主ViewController:

import UIKit  
class ViewController: UIViewController, SenderViewControllerDelegate{  
    @IBOutlet weak var showData: UILabel!  

    override func viewDidLoad() {  
        super.viewDidLoad()  
    }  

    @IBAction func goToView(sender: AnyObject) {  
        let pvc = storyboard?.instantiateViewControllerWithIdentifier("senderViewController") as! SenderViewController  
        pvc.delegate = self  
        self.presentViewController(pvc, animated:true, completion:nil)  
    }  

   // What triggers this method, how it know when to listen? 
    func messageData(data: AnyObject) {  
        self.showData.text = "\(data)"  
    }  
} 
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Dun*_*n C 5

对象并不完全监听方法调用。他们坐在那里,等待召唤。

线

self.delegate?.messageData(inputMessage.text!)
Run Code Online (Sandbox Code Playgroud)

从你SenderViewController是一个函数调用。(术语方法和函数几乎可以互换,尽管method通常用于对象的函数。)它在 中调用函数 messageData ViewController。