Wie werden NSFileHandle-Ausnahmen in Swift 2.0 richtig behandelt?
Zunächst bin ich neu in iOS und Swift und komme aus der Android / Java-Programmierung. Für mich ist die Idee, eine Ausnahme beim Versuch, in eine Datei zu schreiben, abzufangen, eine zweite Natur, wenn nicht genügend Speicherplatz vorhanden ist, Probleme mit den Dateiberechtigungen vorliegen oder was auch immer mit einer Datei (und meiner Erfahrung nach) passieren kann. . Ich verstehe auch, dass in Swift Ausnahmen anders sind als in Android / Java, deshalb frage ich hier nicht danach.
Ich versuche, mit NSFileHandle an eine Datei anzuhängen, wie folgt:
let fileHandle: NSFileHandle? = NSFileHandle(forUpdatingAtPath: filename)
if fileHandle == nil {
//print message showing failure
} else {
let fileString = "print me to file"
let data = fileString.dataUsingEncoding(NSUTF8StringEncoding)
fileHandle?.seekToEndOfFile()
fileHandle?.writeData(data!)
}
Allerdings sowohl dieseekToEndOfFile()
, undwriteData()
-Funktionen geben an, dass sie eine Art Ausnahme auslösen:
Diese Methode löst eine Ausnahme aus, wenn der Dateideskriptor geschlossen oder ungültig ist, der Empfänger einen nicht verbundenen Pipe- oder Socket-Endpunkt darstellt, kein freier Speicherplatz im Dateisystem vorhanden ist oder ein anderer Schreibfehler auftritt. - Apple Dokumentation fürwriteData()
Also, was ist der richtige Weg, um dies in Swift 2.0 zu behandeln? Ich habe die links gelesen Fehlerbehandlung in Swift-Sprache, try-catch-Ausnahmen in Swift, NSFileHandle writeData: Ausnahmebehandlung, Swift 2.0 Ausnahmebehandlung, undWie fange ich eine Ausnahme in Swift, aber keiner von ihnen hat eine direkte Antwort auf meine Frage. Ich habe etwas über die Verwendung von Objective-C in Swift-Code gelesen, aber da ich neu in iOS bin, weiß ich nicht, was diese Methode ist, und kann sie anscheinend nirgendwo finden. Ich habe auch versucht, die neue Swift 2.0do-catch
-Blöcke, aber sie erkennen nicht, dass für NSFileHandle-Methoden Fehler ausgegeben werden, höchstwahrscheinlich, da die Funktionsdokumentation kein Throw-Schlüsselwort enthält.
Ich bin mir bewusst, dass ich die App einfach abstürzen lassen könnte, wenn der Speicherplatz knapp wird oder was auch immer, aber da die App möglicherweise später im App Store veröffentlicht wird, möchte ich das nicht. Wie mache ich das auf die Swift 2.0-Art?
BEARBEITEN Dies ist derzeit ein Projekt mit nur Swift-Code. Obwohl es in Objective-C anscheinend eine Möglichkeit gibt, dies zu tun, habe ich keine Ahnung, wie ich die beiden kombinieren soll.