คนงานง่ายสุดซ่อมคือการสร้างหนึ่ง do
บล็อคจากที่คุณกลับมาถ้าทุกอย่างเรียบร้อยดี และหนึ่งบล็อกจับซึ่งจะเกิดขึ้นถ้ามีอะไรผิดปกติ. คุณยังต้องปรับตัวของคุณฟังก์ชันลายเซ็นเพื่อกลับตัวเลือกค่าตั้งแต่ในกรณีของความล้มเหลวคุณอาจจะไม่มี 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
}
}
คุณยังสามารถแยกออกช่วงตึกดังนั้นกันและพยายามเป็นอยู่ในตัวของมันเองบริเวณแถวนั้นแล้ว e.g.:
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
}
คุณยังสามารถแยกข้อมูลการถอดรหัสในส่วนตัวฟังก์ชันและกลับมาอยู่นั่นเรียกฟังก์ชัน:
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
}
}