İşlev hatalarını işleme

0

Soru

Belgelerden hata işlemenin nasıl yapılacağını anlamıyorum, aşağıdakilere sahibim:

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
}

Şöyle bir şey denedim:

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

ve iade beyanı diyor ki: Cannot find 'decodedData' in scope ve bir uyarı: Result of call to 'decode(_:from:)' is unused

Biri bana bunun nasıl çalıştığını açıklayabilir mi lütfen?

Teşekkürler

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

En iyi cevabı

0

En basit düzeltme bir tane oluşturmaktır do her şey yolundaysa geri döneceğin blok. Ve bir şeyler ters giderse olacak bir yakalama bloğu. Ayrıca, isteğe bağlı değeri döndürmek için işlev imzanızı ayarlamanız gerekir, çünkü başarısızlık durumunda muhtemelen bir 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
    }
}

blokları da ayırabilirsiniz, böylece her deneme kendi bloğundadır, örn.:

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
}

Ayrıca veri kod çözmeyi özel işleve ayırabilir ve bu işlev çağrısına geri dönebilirsiniz:

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

ohhhh yani dönüş de avın içine giriyor! Bu cevapta birçok örnek var, teşekkürler!! Bunu yazarken inceliyorum.
Albert

Diğer dillerde

Bu sayfa diğer dillerde

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