处理功能的错误

0

的问题

我不明白从文件如何做到的错误处理,我有如下:

func myFunc() async -> TransactionsClassAModel {
    let url = URL(string: "..."))
    
    let undecodedData = try! await networkingTools.afRequest(url: url!)
    let decodedData = try! JSONDecoder().decode(TransactionsClassAModel.self, from: undecodedData)
    
    return decodedData
}

我想是这样的:

do {
    let undecodedData = try await networkingTools.afRequest(url: url!)
    try JSONDecoder().decode(TransactionsClassAModel.self, from: undecodedData)
} catch {
    print("error: ", error)
}

和返回的声明说 Cannot find 'decodedData' in scope 和一个警告: Result of call to 'decode(_:from:)' is unused

有人能给我解释一下这是怎么运作的请。

感谢

swift
2021-11-23 20:30:01
1

最好的答案

0

最简单的解决方法是创建一个 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
    }
}

你也可以以单独的区块,因此每次尝试是在其自己的方框,例如:

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
    }
}
2021-11-23 23:01:03

没有人像这样的返回里面去抓好! 很多例子,在这个答案了,谢谢你! 在研究它,因为我写这篇文章。
Albert

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................