Delegate Method is not called in Swift?

use*_*878 2 delegates swift swift-protocols

I want to pass a Bool value from on view controller to another without the help of segues. So i referred & got Delegates.

I have applied delegates in my App. But the Delegate method is not being called. I don't know where i am making the mistake.

So Please help me.

MainViewController

class MainViewController: UIViewController, WriteValueBackDelegate {

    @IBOutlet weak var LoginButton: UIButton!
    var LoggedInL :Bool?

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

    func writeValueBack(value: Bool) {
        println("Delegate Method")
        if (value == true){
            LoginButton.setTitle("My Profile", forState:UIControlState.Normal)
        }
    }
Run Code Online (Sandbox Code Playgroud)

Second View Controller

class LoginController: UIViewController {

    @IBOutlet weak var LoginLabel: UILabel!
    @IBOutlet weak var email: UITextField!

    @IBOutlet weak var pwd: UITextField!
    var LoggedInL :Bool?

    var mydelegate: WriteValueBackDelegate?

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

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func onSubmit(sender: AnyObject) {

         Alamofire.request(.GET, "http://www.jive.com/index.php/capp/user_verification/\(email.text)/\(pwd.text)")
            .responseJSON { (_, _, data, _) in

                println(data)
                let json = JSON(data!)
                let name = json["first_name"].stringValue
                let status = json["valid_status"].intValue
                println(status)
                var e = self.email.text
                println(e)
                self.LoginLabel.text = "Hey \(name)!"

                if status == 1{
                    println("Correect")
                     self.LoggedInL = true
                    self.mydelegate?.writeValueBack(true)

                }else {
                     self.LoggedInL = false
                    println("Error")
                }
        }
        navigationController!.popViewControllerAnimated(true)
    }
}

protocol WriteValueBackDelegate {
    func writeValueBack(value: Bool)
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rom 5

you didn't initialize the delegate, and no need to, delegates are usually for async callbacks. do that instead:

class MainViewController: UIViewController {

    static var sharedInstace : MainViewController?;
    @IBOutlet weak var LoginButton: UIButton!
    var LoggedInL :Bool?

    override func viewDidLoad() {
        super.viewDidLoad()
        MainViewController.sharedInstace = self; //this is better from init function
    }

    func writeValueBack(value: Bool) {
        println("Delegate Method")
        if (value == true){
            LoginButton.setTitle("My Profile", forState:UIControlState.Normal)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

in login view controller

MainViewController.sharedInstance?.writeValueBack(true)
Run Code Online (Sandbox Code Playgroud)