2015-07-11 1 views
56

Sto aggiornando il mio codice per utilizzare Swift e mi sto chiedendo come stampare i dettagli dell'errore per un'eccezione che corrisponda alla clausola 'catch all'. Ho leggermente modificato l'esempio da questo Swift Language Guide Page per illustrare il mio punto:Come stampare i dettagli di un'eccezione 'catch all' in Swift?

do { 
    try vend(itemNamed: "Candy Bar") 
    // Enjoy delicious snack 
} catch VendingMachineError.InvalidSelection { 
    print("Invalid Selection.") 
} catch VendingMachineError.OutOfStock { 
    print("Out of Stock.") 
} catch VendingMachineError.InsufficientFunds(let amountRequired) { 
    print("Insufficient funds. Please insert an additional $\(amountRequired).") 
} catch { 
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE? 
} 

Se prendo un'eccezione imprevista, ho bisogno di essere in grado di accedere qualcosa su ciò che ha causato esso.

risposta

84

Ho appena capito. Ho notato questa linea nella documentazione Swift:

Se una clausola catch non specifica un modello, la clausola corrisponderà e associare qualsiasi errore una costante locale chiamato errore

Così, allora ho provato questo:

do { 
    try vend(itemNamed: "Candy Bar") 
... 
} catch { 
    print("Error info: \(error)") 
} 

E mi ha dato una bella descrizione.

31

Da La Swift linguaggio di programmazione:

Se una clausola catch non specifica un modello, la clausola corrisponderà e associare qualsiasi errore una costante locale di nome error.

Cioè, c'è un implicito let error nella clausola catch:

do { 
    // … 
} catch { 
    print("caught: \(error)") 
} 

In alternativa, sembra che let constant_name è anche un modello valido, per cui si potrebbe utilizzare per rinominare l'errore costante (questa potrebbe essere utile se il nome error è già in uso):

do { 
    // … 
} catch let myError { 
    print("caught: \(myError)") 
}