Как открыть файл в Swift?
Мне еще предстоит увидеть документацию стандартной библиотеки Swift, где я ожидаю найти что-то вроде класса или структуры File с интерфейсом для открытия, чтения и записи файлов. Все обычные вещи, которые вы ожидаете от File IO. Есть ли он или зависит от NSFileManager и его ilk?
Ответы
Ответ 1
Стандартная библиотека Swift не включает эту функциональность. Стандартная библиотека в основном содержит структуры данных, типы и вызовы низкого уровня и полу-встроенные языковые функции; I/O за пределами print()
и readLine()
считается вне сферы действия. Я действительно не ожидаю, что это изменится и в ближайшем будущем.
Тем не менее, Фонд содержит файл ввод/вывод вызовов, и проект Swift Corelibs работают трудно переописать фонд в чистом Swift поэтому везде Свифт. Вызовы POSIX I/O, доступные в каждой основной операционной системе, также доступны в Swift, хотя они гораздо более неудобны в использовании.
Ответ 2
Вот способ сделать это, если файл находится в вашем проекте iOS (надеясь, что это ваша ситуация):
var filePath = Bundle.main.path(forResource: "theFile", ofType: "txt")
var data = Data(contentsOf: URL(fileURLWithPath: filePath))
Ответ 3
Если вам просто нужно прочитать содержимое файла в строке, способ Swift 2.0 сделать это:
do {
var dictionary = try String(contentsOfFile: "/usr/share/dict/words", encoding: NSUTF8StringEncoding)
} catch {
}
В противном случае работают более задействованные методы.
Ответ 4
Часто в приложениях вы будете использовать UIDocument и другие связанные с iCloud способы сохранения файлов, но в блоге Swift Apple использует примеры на основе C и POSIX для открытия и сохранения файлов. Таким образом, они имеют в одном примере:
let fd = open("/tmp/scratch.txt", O_WRONLY|O_CREAT, 0o666)
if fd < 0 {
perror("could not open /tmp/scratch.txt")
} else {
let text = "Hello World"
write(fd, text, text.characters.count)
close(fd)
}
И это выглядит очень быстро, но хотите ли вы использовать это над фреймворком Cocoa, который я не знаю.
Ответ 5
Я думаю, что единственный правильный ответ на данный момент: нет библиотеки файлов /IO на основе Swift, поэтому вам просто нужно использовать классы Foundation на основе Objective-C. Как говорит @BryanChen, возможно, вернется через год, чтобы найти более сложную стандартную библиотеку Swift.