2017-01-19 2 views
2

Könnte es sein, dass bei Verwendung von try? (optional versuchen) für den Aufruf einer Wurffunktion ohne Rückgabewert die Fehler einfach ignoriert werden?Optionaler Versuch für Funktion mit keinem Rückgabewert

func throwingVoidFunction() throws { . . . } 

try? throwingVoidFunction() 

ich erwartete, dass der Compiler keine try? vor einem Wurf Funktion mit Rückgabetyp void, aber der Compiler beschwert sich nicht zulässt.

So ist try? vor einer void-Funktion eine Möglichkeit, um Fehler zu absorbieren? (wie bei Verwendung eines leeren Standardfangs: catch {})

Antwort

2

Es gibt keinen Grund für den Compiler, sich zu beschweren. Der Rückgabetyp von

func throwingVoidFunction() throws { ... } 

ist Void und damit die Art des Ausdrucks

try? throwingVoidFunction() 

ist Optional<Void>, und sein Wert ist nil (== Optional<Void>.none), wenn ein Fehler ausgegeben wurde, während die Expression Auswertung und Optional<Void>.some() ansonsten.

Sie können den Rückgabewert ignorieren oder ihn gegen testen. Ein Beispiel ist in An elegant way to ignore any errors thrown by a method gegeben:

let fileURL = URL(fileURLWithPath: "/path/to/file") 
let fm = FileManager.default 
try? fm.removeItem(at: fileURL) 
+0

Bad ist es nicht schlecht Stil einen geworfenen Fehler einfach zu ignorieren? – user1364368

+0

@ user1364368: Sie haben im Allgemeinen Recht. In diesem speziellen Fall würde der wahrscheinlichste Fehler darin bestehen, dass die Datei nicht existiert und Ihnen das vielleicht egal ist. Wie auch immer, es ist nur ein Beispiel für das, wonach Sie gefragt haben. –

+0

Es gibt auch eine Karikatur auf das Problem der einfach zu ignorieren Fehler: http://www.comitstrip.com/en/2015/07/30/coders-weaknesses-1-the-trycatch/ – user1364368

Verwandte Themen