Delegates in swift?

前端 未结 12 1327
天命终不由人
天命终不由人 2020-11-22 03:27

How does one go about making a delegate, i.e. NSUserNotificationCenterDelegate in swift?

12条回答
  •  醉话见心
    2020-11-22 04:21

    Here's a little help on delegates between two view controllers:

    Step 1: Make a protocol in the UIViewController that you will be removing/will be sending the data.

    protocol FooTwoViewControllerDelegate:class {
        func myVCDidFinish(_ controller: FooTwoViewController, text: String)
    }
    

    Step2: Declare the delegate in the sending class (i.e. UIViewcontroller)

    class FooTwoViewController: UIViewController {
        weak var delegate: FooTwoViewControllerDelegate?
        [snip...]
    }
    

    Step3: Use the delegate in a class method to send the data to the receiving method, which is any method that adopts the protocol.

    @IBAction func saveColor(_ sender: UIBarButtonItem) {
            delegate?.myVCDidFinish(self, text: colorLabel.text) //assuming the delegate is assigned otherwise error
    }
    

    Step 4: Adopt the protocol in the receiving class

    class ViewController: UIViewController, FooTwoViewControllerDelegate {
    

    Step 5: Implement the delegate method

    func myVCDidFinish(_ controller: FooTwoViewController, text: String) {
        colorLabel.text = "The Color is " +  text
        controller.navigationController.popViewController(animated: true)
    }
    

    Step 6: Set the delegate in the prepareForSegue:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "mySegue" {
            let vc = segue.destination as! FooTwoViewController
            vc.colorString = colorLabel.text
            vc.delegate = self
        }
    }
    

    And that should work. This is of course just code fragments, but should give you the idea. For a long explanation of this code you can go over to my blog entry here:

    segues and delegates

    If you are interested in what's going on under the hood with a delegate I did write on that here:

    under the hood with delegates

提交回复
热议问题