Hallo zusammen!
Die Hölle friert zu und ich fange an, in kleinen Schritten Funktionen meines Alt-Projektes in Swift zu realisieren. Es fühlt sich noch komisch an und häufiger bin ich unsicher, ob der von mir geschriebene Code "korrekt" ist: Er macht, was er soll - fühlt sich aber merkwürdig an.
So auch hier in einem Fall der Fehlerbehandlung. Zunächst der relevante Code (eingekürzt):
Alles anzeigen
Ich präsentiere also ein "Open"-Panel und anschliessend soll (unter anderem) eine Datei verschoben werden. Hierbei interessiert mich ganz bewusst nicht, ob dieser Vorgang erfolgreich war. Ich habe daher dem
Ist mein Verständnis korrekt oder was stimmt nicht? Wie würdet Ihr den Fall lösen? Gibt es sonst Dinge im obigen Code, die "so gar nicht gehen"? Ich bin für jede Korrektur dankbar
Mattes
P.S.: Ist es normal, dass man in Swift durch das viele Unwrapping von Optionals massenhaft if-Klauseln schachtelt - oder wie vermeidet Ihr das?
Die Hölle friert zu und ich fange an, in kleinen Schritten Funktionen meines Alt-Projektes in Swift zu realisieren. Es fühlt sich noch komisch an und häufiger bin ich unsicher, ob der von mir geschriebene Code "korrekt" ist: Er macht, was er soll - fühlt sich aber merkwürdig an.
So auch hier in einem Fall der Fehlerbehandlung. Zunächst der relevante Code (eingekürzt):
Quellcode
- openPanel.beginSheetModal(for:self.window!) { (response) in
- if response == .OK {
- if let imageURL = openPanel.url {
- let fileManager = FileManager.default
- if var targetURL = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask).first {
- targetURL.appendPathComponent(UUID().uuidString)
- targetURL.appendPathExtension(imageURL.pathExtension)
- try fileManager.moveItem(at: imageURL, to: targetURL)
- } }
- }
- }
- openPanel.close()
- }
Ich präsentiere also ein "Open"-Panel und anschliessend soll (unter anderem) eine Datei verschoben werden. Hierbei interessiert mich ganz bewusst nicht, ob dieser Vorgang erfolgreich war. Ich habe daher dem
FileManager.moveItem
ein try ohne catch vorangestellt. Allerdings meckert Xcode dann bei der beginSheetModal-Funktion:Ich vermute, weil moveItem einen Fehler werfen könnte, die Deklaration von beginSheetModal dies aber nicht vorsieht. Das Ganze funktioniert, wenn ich per try? ein Optional try verwende. Dann - so verstehe ich es - wird im Fehlerfall "nur" nil zurückgegeben, keine Exception ausgelöst.Invalid conversion from throwing function of type '(NSApplication.ModalResponse) throws -> Void' to non-throwing function type '(NSApplication.ModalResponse) -> Void'
Ist mein Verständnis korrekt oder was stimmt nicht? Wie würdet Ihr den Fall lösen? Gibt es sonst Dinge im obigen Code, die "so gar nicht gehen"? Ich bin für jede Korrektur dankbar
Mattes
P.S.: Ist es normal, dass man in Swift durch das viele Unwrapping von Optionals massenhaft if-Klauseln schachtelt - oder wie vermeidet Ihr das?
Diese Seite bleibt aus technischen Gründen unbedruckt.