Прежде всего, я новичок в iOS и Swift и имею опыт программирования на Android/Java. Поэтому для меня идея перехвата исключения из попытки записи в файл является второй натурой, в случае нехватки места, проблем с правами доступа к файлу или чего-либо еще, что может случиться с файлом (и произошло, по моему опыту) . Я также понимаю, что в Swift исключения отличаются от исключений Android/Java, поэтому я не об этом спрашиваю.
Я пытаюсь добавить файл с помощью NSFileHandle, например:
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!)
}
Однако обе функции seekToEndOfFile()
и writeData()
указывают на то, что они вызывают какое-то исключение:
Этот метод вызывает исключение, если дескриптор файла закрыт или недействителен, если получатель представляет несвязанную конечную точку канала или сокета, если в файловой системе не осталось свободного места или если возникает любая другая ошибка записи. - Документация Apple для
writeData()
Итак, как правильно справиться с этим в Swift 2.0? Я прочитал ссылки Обработка ошибок в Swift-Language, попробуйте перехватить исключения в Swift, NSFileHandle writeData: обработка исключений, Swift 2.0 обработка исключений и Как перехватить исключение в Swift, но ни в одном из них нет прямого ответа на мой вопрос. Я кое-что читал об использовании Objective-C в коде Swift, но, поскольку я новичок в iOS, я не знаю, что это за метод, и нигде не могу его найти. Я также попробовал новые блоки Swift 2.0 do-catch
, но они не распознают, что для методов NSFileHandle выдается какая-либо ошибка, скорее всего, поскольку в документации по функциям нет ключевого слова throw.
Я знаю, что могу просто допустить сбой приложения, если ему не хватит места или что-то еще, но, поскольку приложение, возможно, будет выпущено в магазин приложений позже, я этого не хочу. Итак, как мне сделать это в стиле Swift 2.0?
EDIT: В настоящее время это проект только с кодом Swift, поэтому, хотя кажется, что есть способ сделать это в Objective-C, я понятия не имею, как их смешать.