gpt4 book ai didi

iOS Swift 如何检测登录错误原因以向用户显示正确的错误警报

转载 作者:搜寻专家 更新时间:2023-11-01 06:52:13 24 4
gpt4 key购买 nike

我需要为我的应用程序创建登录功能,API 会在成功登录时检索身份验证 token 。在我当前的实现中,网络层执行 API 调用并返回一个带有 bool 值(取决于登录结果)和字符串 token (我在请求登录的 viewController 中需要它)的闭包。

我的问题是我想根据登录失败的原因(例如,无连接、密码错误)向用户显示适当的警报。通过这个实现,我发现我无法实现这个结果。有人可以帮助我改进我的解决方案吗?

这是我的代码:

    public func load(_ urlString: String, email: String, password: String, withCompletion completion: @escaping (_:Bool,_ token: String) -> Void) {

let session = URLSession(configuration: .ephemeral, delegate: nil, delegateQueue: OperationQueue.main)
let url = URL(string: urlString)!

var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
let parameters: [String: Any] = [
"email": email,
"password": password
]
do {
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
}

urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
let task = session.dataTask(with: urlRequest, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) -> Void in
guard let data = data,
let response = response as? HTTPURLResponse,
error == nil else {
return
}

guard (200 ... 299) ~= response.statusCode else {
completion(false,"")
return
}

let responseString = String(data: data, encoding: .utf8)
do{

let jsonResponse = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String : Any]
print(jsonResponse) //Response result

let token: String = jsonResponse?["token"] as! String
completion(true,token)
} catch let parsingError {
completion(false,"")
return
}
})
task.resume()
}
}

我的 View Controller

        network.load(NetworkController.loginURL,email: email, password: password) { [weak self] (result :Bool, token: String) in
if result{
print("Successful Authentication with token \(token)")
}
else{
print("Authentication failed")
//show Error alert
}
}

最佳答案

你也应该为错误添加完成 block ,因为错误也可能发生。

public func load(email: String, password: String, success: @escaping (token: String) -> (), failure: @escaping (Error) -> ()) {

//your code here

}

如果您不想为成功和失败指定单独的完成,请引用 Davydov Denis 的回答。如果成功,则错误将为零,反之亦然。

Also specify your Base URL in a seperate constant file and add only /login for easy understanding and clean code.

关于iOS Swift 如何检测登录错误原因以向用户显示正确的错误警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com