La più semplice correzione è la creazione di uno do
blocco, da cui si torna, se tutto va bene. E un blocco catch che accadrà se qualcosa sta andando storto. È inoltre necessario regolare la vostra firma della funzione per restituire il valore opzionale, in quanto in caso di guasto, probabilmente non hanno un TransactionsClassAModel
:
func myFunc() async -> TransactionsClassAModel? {
let url = URL(string: "...")
do {
let undecodedData = try await networkingTools.afRequest(url: url!)
let decodedData = try JSONDecoder().decode(TransactionsClassAModel.self, from: undecodedData)
/* do anything you need */
return decodedData // success
} catch {
print(error)
return nil // no object in this case
}
}
è anche possibile separare i blocchi, in modo che ogni prova è nel proprio blocco, ad esempio:
func myFunc() async -> TransactionsClassAModel? {
let url = URL(string: "...")
var undecodedData: Data // or optional Data? if function can return nil
do {
let undecodedData = try await networkingTools.afRequest(url: url!)
} catch {
print("Failed in afReqest: \(error)")
return nil
}
var decodedData: TransactionClassModel?
do {
decodedData = try JSONDecoder().decode(TransactionsClassAModel.self, from: undecodedData)
} catch {
print("Failed in decode: \(error)")
return nil
}
return decodedData
}
È anche possibile separare decodifica dei dati in funzione privata, e il ritorno della funzione chiamata:
private func decodeMyData(_ undecodedData; Data) -> TransactionsClassAModel? {
do {
return try JSONDecoder().decode(TransactionsClassAModel.self, from: undecodedData)
} catch {
print("Failed in decode: \(error)")
return nil
}
}
func myFunc() async -> TransactionsClassAModel? {
let url = URL(string: "...")
do {
let undecodedData = try await networkingTools.afRequest(url: url!)
return decodeMyData(undecodedData)
} catch {
print("Failed in afReqest: \(error)")
return nil
}
}