Прежде всего, я новичок в 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, исключения try-catch в 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, я понятия не имею, как смешать эти два.