Обработчик завершения функций Swift 4 - PullRequest
0 голосов
/ 25 января 2019

Как я могу вернуть ошибку и результат завершения и вызвать мою функцию таким образом? Что я должен написать в своей функции, чтобы вернуть результат завершения и ошибку, если таковые имеются?

пример:

signIn(withEmail: emailTextField.text!, password: passwordTextField.text!) { (user, error)  in
    if error == nil {
        self.performSegue(withIdentifier: "loginToHome", sender: nil)
    } else {
        let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
    }
}

моя функция для редактирования:

static func signIn(email: String, enablefor: String, 
                   func: String, completion: @escaping ((User) -> Void))

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Объявите это так:

completion: @escaping ((User?, Error?) -> Void)

Внутри вашей функции:

completion(user, nil) // when you have user

completion(nil, error) // when you have error

При вызове блока завершения:

completion: { user, error in

    if let error = error {
          // handle error
    }

    if let user = user {
        // handle user
    }
}
0 голосов
/ 25 января 2019

Вам просто нужно объявить ваш обработчик завершения, чтобы он принимал кортеж в качестве входного аргумента, и убедитесь, что вы пометили оба параметра User и Error как Optional, поскольку вы должны когда-либо возвращать только один из двух.

static func signIn(email: String, enablefor: String, func: String, completion: @escaping ((User?,Error?) -> Void))

signIn(withEmail: emailTextField.text!, password: passwordTextField.text!) { (user, error)  in
    if error == nil, let user = user {
        self.performSegue(withIdentifier: "loginToHome", sender: nil)
    } else {
      let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
    }
} 

На самом деле вы должны использовать параметр user, поскольку в данный момент вы его ни для чего не используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...