Работа с файлами и каталогами стала намного проще в iOS 16. Раньше, чтобы получить путь к файлу в папке приложения, приходилось использовать API FileManager, что довольно сложно. Теперь мы можем получать пути к системным папкам непосредственно из статических свойств типа URL.

Например, чтобы получить URL каталога документов в песочнице нашего приложения, мы можем прочитать свойство URL.documentsDirectory.

let url = URL.documentsDirectory

Мы можем так же легко получить URL-адреса других системных папок. Посмотрите свойства типа в документации для URL struct для получения полного списка доступных опций.

Еще одно значительное улучшение — новый метод appending(path:directoryHint:), который заменяет старый appendingPathComponent(_:isDirectory:). Новый метод получает параметр DirectoryHint, который указывает, должен ли Foundation выполнить проверку файловой системы, чтобы определить, относится ли путь к папке. Значение по умолчанию — inferFromPath подразумевает, что эта информация будет выведена из строки пути, которую мы передаем в метод. Если строка содержит слеш, она будет рассматриваться как путь к каталогу.

До iOS 16 нам приходилось либо передавать булево значение isDirectory в appendingPathComponent(_:isDirectory:), либо вызывать appendingPathComponent(_:) без булева параметра. Последний вариант может привести к тому, что Foundation framework выполнит операцию с файловой системой, чтобы определить, является ли компонент пути каталогом. Это имеет последствия для производительности и может быть легко предотвращено с помощью нового метода.

Теперь для создания URL-адреса файла мы можем просто написать url.appending(path: "myfile"). Foundation на основе пути опеределит, что это не каталог, поскольку в нем нет слеша, и не будет выполнять ненужную проверку файловой системы.

Благодаря всем этим улучшениям мы можем получить URL-адрес файла в каталоге документов в iOS 16 с помощью очень простой строки кода.

// iOS 16 example
let fileURL = URL.documentsDirectory
    .appending(path: "myfile")

Это отличное обновление по сравнению с iOS 15, где для достижения того же результата нам пришлось бы использовать более сложные API FileManager.

// iOS 15 example
let fileURL = try FileManager.default
    .url(
        for: .documentDirectory,
        in: .userDomainMask,
        appropriateFor: nil,
        create: false
    )
    .appendingPathComponent(
        "myfile", isDirectory: false
    )

За обновлениями блога и рекомендациями по разработке следите за нами в Twitter @nilcoalescing.


Компания Apple только что анонсировала фреймворк Swift Charts, который мы можем использовать для создания диаграмм в приложениях. Приглашаем всех желающих на открытое занятие, на котором рассмотрим возможности API Swift Charts. Регистрируйтесь по ссылке.

Комментарии (0)