Como lidar adequadamente com as exceções do NSFileHandle no Swift 2.0?
Primeiro de tudo, eu sou novo no iOS e no Swift e venho de um histórico da programação Android / Java. Então, para mim, a idéia de capturar uma exceção de uma tentativa de gravar em um arquivo é uma segunda natureza, em caso de falta de espaço, problemas de permissão de arquivo ou qualquer outra coisa que possa acontecer com um arquivo (e aconteceu, na minha experiência) . Eu também entendo que no Swift, as exceções são diferentes das do Android / Java, então não é isso que estou perguntando aqui.
Estou tentando anexar a um arquivo usando NSFileHandle, assim:
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!)
}
No entanto, tanto oseekToEndOfFile()
ewriteData()
As funções indicam que eles lançam algum tipo de exceção:
Esse método gera uma exceção se o descritor de arquivo estiver fechado ou não for válido, se o receptor representar um ponto final de tubo ou soquete não conectado, se não houver espaço livre no sistema de arquivos ou se ocorrer outro erro de gravação. - Documentação da Apple parawriteData()
Então, qual é a maneira correta de lidar com isso no Swift 2.0? Eu li os linksTratamento de erros em linguagem rápida, exceções try-catch no Swift, NSFileHandle writeData: tratamento de exceções, Manipulação de exceção Swift 2.0eComo capturar uma exceção no Swift, mas nenhum deles tem uma resposta direta à minha pergunta. Eu li algo sobre o uso do objetivo-C no código Swift, mas, como sou novo no iOS, não sei o que é esse método e não consigo encontrá-lo em lugar nenhum. Eu também tentei o novo Swift 2.0do-catch
blocos, mas eles não reconhecem que qualquer tipo de erro está sendo gerado para os métodos NSFileHandle, provavelmente porque a documentação da função não possui uma palavra-chave throw.
Estou ciente de que poderia deixar o aplicativo travar se ficar sem espaço ou o que quer que seja, mas como o aplicativo será lançado posteriormente na loja de aplicativos, não quero isso. Então, como faço isso da maneira Swift 2.0?
EDITAR: Atualmente, este é um projeto com apenas código Swift, portanto, embora pareça que exista uma maneira de fazer isso no Objective-C, não tenho idéia de como combinar os dois.