gpt4 book ai didi

json - Swift4 从 '(_, _, _) throws -> ()' 类型的抛出函数到非抛出函数类型的无效转换 '(Data?, URLResponse?, Error?)

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:11 24 4
gpt4 key购买 nike

func DoLogin(_ email:String, _ password:String)
{
struct User: Decodable {
let sfname: String
let slname: String
let email: String
let sid: Int
}

let url = URL(string: "http://URL")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let postString = "email=" + email + "&password=" + password + ""
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print(error!)
return
}

if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print(response!)
}

if let responseString = String(data: data, encoding: .utf8){
let myStruct = try JSONDecoder().decode(User.self, from: responseString)
}
}

task.resume()
}

所以目的是解码 HTTP 响应 responseString 以便将信息保存到 User 的属性中,但是我在插入后不断弹出相同的错误解码 HTTP 响应的代码行 (myStruct)。我觉得它与 Do Try Catch 错误处理有关,但无法弄清楚。

在此先感谢您的帮助:)

最佳答案

这是你的问题:

let myStruct = try JSONDecoder().decode(User.self, from: responseString)

的完成处理程序
URLSession.shared.dataTask(with: URLRequest, completionHandler: (Data?, URLResponse?, Error?) -> Void)

不允许抛出或重新抛出异常。如果有,签名将是这样的:

URLSession.shared.dataTask(with: URLRequest, completionHandler: (Data?, URLResponse?, Error?) throws -> Void)

(注意方法签名中的throws)

此外,您需要确保将 responseString 更改为 datadecode 方法接受一个Data 对象,而不是一个String。将 data 转换为 String 实际上根本不需要,因此您可以从代码中删除此 if 语句:

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

尝试做这样的事情:

do {
let myStruct = try JSONDecoder().decode(User.self, from: data)
//do something with myStruct
} catch let error as NSError {
//do something with error
}

或者这个:

if let myStruct = try? JSONDecoder().decode(User.self, from: data) {
//do something with myStruct
} else {
//handle myStruct being nil
}

关于json - Swift4 从 '(_, _, _) throws -> ()' 类型的抛出函数到非抛出函数类型的无效转换 '(Data?, URLResponse?, Error?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48712752/

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