Как открыть файл в 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.