函数完成处理程序Swift 4

时间:2019-01-25 11:42:34

标签: swift function

我如何返回错误和完成结果并像这样调用我的函数? 我应该在函数中写些什么,以返回完成结果和错误(如果有的话)?

示例:

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

我要编辑的功能:

{{1}}

2 个答案:

答案 0 :(得分:0)

您只需要声明您的完成处理程序以元组作为输入参数,并确保将UserError参数都标记为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参数,因为目前您还没有使用它。

答案 1 :(得分:0)

这样声明:

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
    }
}