Работа с файлами и каталогами стала намного проще в 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. Регистрируйтесь по ссылке.