Como fazer solicitação de postagem HTTP com corpo específico? E como acessar o token do servidor para permitir o login?

Estou tendo um cenário como:

1) Quero criar uma solicitação HTTP POST e, para isso, estou tendo os dados, consulte esta imagem:

2) Como você pode ver na imagem acima, eu tenho que criar uma solicitação com o corpo mencionado e também estou recebendo uma resposta chamada: token. Como criar uma solicitação de postagem e buscar essa resposta do token?

3) Essa resposta de token permitirá que eu entre no myapp.

Eu sou novato neste cenário. Eu tentei algum código sozinho, mas ainda estou confuso sobre como combinar o código delegado do meu aplicativo com este código de solicitação POST.

Código

 @IBAction func signinaction(_ sender: Any) {

    self.username.resignFirstResponder()
    self.password.resignFirstResponder()

    if (self.username.text == "" || self.password.text == "") {
        let alertView = UIAlertController(title: "Login failed",
                                          message: "Wrong username or password." as String, preferredStyle:.alert)
        let okAction = UIAlertAction(title: "Try Again!", style: .default, handler: nil)
        alertView.addAction(okAction)
        self.present(alertView, animated: true, completion: nil)
        return
    }

    // Check if the user entered an email
    if let actualUsername = self.username.text {

        // Check if the user entered a password
        if let actualPassword = self.password.text {

            // Build the body message to request the token to the web app
            self.bodyStr = "username=8870417698&password=1234&grant_type=password" + actualUsername + "&password=" + actualPassword

            // Setup the request
            let myURL = NSURL(string: "http://ezschoolportalapi.azurewebsites.net/token")!
            let request = NSMutableURLRequest(url: myURL as URL)
            request.httpMethod = "POST"
            request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
            request.setValue("application/json", forHTTPHeaderField: "Accept")
            request.httpBody = bodyStr.data(using: String.Encoding.utf8)!

            let task = URLSession.shared.dataTask(with: request as URLRequest) {
                (data, response, error) -> Void in
                if  data?.count != 0
 {

                    do {

                                                   let tokenDictionary:NSDictionary = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! NSDictionary
                        print(tokenDictionary)
                        // Get the token
                        let token:String = tokenDictionary["access_token"] as! String

                        // Keep record of the token

                        let userdefaults = UserDefaults()

                        let saveToken = userdefaults.set(token, forKey: "access_token")
                        userdefaults.synchronize()


                        // Dismiss login view and go to the home view controller
                        DispatchQueue.main.async {
                            self.dismiss(animated: true, completion: nil)
                        }


                    }
                    catch {
                        // Wrong credentials
                        // Reset the text fields
                        self.username.text = ""
                        self.password.text = ""

                        // Setup the alert
                        let alertView = UIAlertController(title: "Login failed",
                                                          message: "Wrong username or password." as String, preferredStyle:.alert)
                        let okAction = UIAlertAction(title: "Try Again!", style:.default, handler: nil)
                        alertView.addAction(okAction)
                        self.present(alertView, animated: true, completion: nil)
                        return
                    }
                }
            }
            task.resume()
        }
    }
}

A questão é como combinar esse código com o código acima:

let appDelegate = UIApplication.shared.delegate as! AppDelegate  appDelegate.gotoMainvc()

se eu usar diretamente esse código, em qualquer um dos casos eu conseguir alternar para a tela inicial, não importa se estou usando esse código de solicitação POST ou não. Por favor ajude.

questionAnswers(1)

yourAnswerToTheQuestion