我有 connect.swift
代码:
public struct Connect {
let adresSerwera = "http://test.nazwa.pl/"
typealias Odpowiedz = (Data?, Error?) -> Void
func getJsonFromServer(parametry: String, wynikRequesta: @escaping Odpowiedz) {
guard let Url = URL(string: self.adresSerwera + "kartyEndpoint.qbpage" + parametry) else { return }
URLSession.shared.dataTask(with: Url) { (data, response, error) in
if error == nil {
guard let data = data else {
print("Error 100: \(error)")
wynikRequesta(nil, error)
return
}
print("R>" + self.adresSerwera + "kartyEndpoint.qbpage?" + parametry)
do {
//let json = try JSONDecoder().decode(forecast.self, from: data)
wynikRequesta(data, nil)
dump(data)
print("\(data)")
} catch let err {
print("Error 101: ", err)
wynikRequesta(nil, err)
}
} else{
print("Error 102: Problem with download data")
}
}.resume()
}
func sprawdzDaneLogowania(login: String?, haslo: String?, callback: @escaping Odpowiedz) {
getJsonFromServer(parametry: "?action=LOGOWANIE&login=\(login!)&password=\(haslo!)", wynikRequesta: callback)
}
}
和下载数据的代码:
@IBAction func btnLoginPressed(_ sender: Any) {
if self.textFieldLogin.text?.isEmpty ?? true || self.textFieldPassword.text?.isEmpty ?? true {
print("Uzupełnij wszystkie pola!!")
} else {
print("Pola uzupełnione")
cms.sprawdzDaneLogowania(login: self.textFieldLogin.text, haslo: self.textFieldLogin.text, callback: { (data, blad) in
if blad == nil{
if let dane = data {
let str = String(data: dane, encoding: .utf8)
let downloadedData = RankingGrupowyObject(JSONString: str!)
let decoder = JSONDecoder()
let zalogowanyUser = try decoder.decode(LoginUser.self, from: data)
} else {
print("Error 103: \(data)")
}
} else {
print("Error 104: \(blad)")
}
})
}
}
对于行: cms.Check the Logs (login: self.textFieldLogin.text, password: self.textFieldLogin.text, 回调:{(date, error) in
我收到一条错误消息:
Invalid conversion from throwing function of '(_, _) throws -> ()' is a non-throwing function type 'Connect. Answer' (aka '(Optional , Optional ) -> ()')
我做错了什么?你如何解决这个错误? 通过使用 CheckLogging 函数,我想创建一个目标对象
最佳答案
let zalogowanyUser = try decoder.decode(LoginUser.self, from: data)
这部分可以抛出,意味着你应该在那里做/捕获:
do {
let zalogowanyUser = try decoder.decode(LoginUser.self, from: data)
}
catch {
print("Error in decoder")
}
或者让错误传播到上部。为此,您的方法 cms.sprawdzDaneLogowania
可以标记为 throws
,或者您的方法的回调 block 可以标记为这样。
关于ios - Swift 4 - 抛出函数的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50015178/