0

我想添加代码以引发需要“catch let printerErrorsecond”和最后一个 catch 块来处理错误的错误。我尝试将 toPrinter 参数的值更新为多个值,但没有任何运气。我还尝试了一些 else if 语句,但似乎无法让最后两个 catch 块中的任何一个来处理错误。似乎可以在 PrinterError 枚举中添加两者的情况,但经过多次尝试,我无法解决问题。您可以提供更好的任何基于代码的解决方案!

enum PrinterError: Error {
    case outOfPaper
    case noToner
    case onFire
}

func send(job: Int, toPrinter printerName: String) throws -> String {
    if printerName == "Never Has Toner" {
        throw PrinterError.noToner
    } else if printerName == "Fire" {
        throw PrinterError.onFire
    } else if printerName == "Empty" {
        throw PrinterError.outOfPaper
    }
    return "Job sent"
}

do {
    let printerResponse = try send(job: 1440, toPrinter: "Gutenberg")
    print(printerResponse)
} catch PrinterError.onFire {
    print("I'll just put this over here, with the rest of the fire.")
} catch let printerError as PrinterError {
    print("Printer error: \(printerError).")
} catch {
    print(error)
}
// Prints "Job sent"
4

1 回答 1

0

尝试通过这种方式实现它

enum PrinterError: Error {
    case outOfPaper
    case noToner
    case onFire
    case deFault
    case noHandeling
}

func send(job: Int, toPrinter printerName: String) throws -> String {
    switch printerName {
    case PrinterError.outOfPaper.localizedDescription:
        print("outOfPaper")
        return PrinterError.outOfPaper.localizedDescription
    case PrinterError.noToner.localizedDescription:
        print("noToner")
        return PrinterError.noToner.localizedDescription
    case PrinterError.onFire.localizedDescription:
        print("onFire")
        return PrinterError.onFire.localizedDescription
    default:
        print("default")
        return PrinterError.deFault.localizedDescription
    }
}


    do {
        try send(job: 100, toPrinter: "AAA")
    } catch {
        print(error.localizedDescription)
    }
于 2022-02-02T11:05:09.803 回答