Получить все URL-адреса для ресурсов в подкаталоге в Swift - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь создать массив URL-адресов для всех ресурсов в подкаталоге моего приложения для iOS.Кажется, я не могу найти правильный путь, я хочу получить URL-адреса, даже если я не знаю имен (т.е. я не хочу жестко кодировать имена файлов в коде).

Ниже приведен снимок экрана иерархии. Я пытаюсь получить все файлы в папке «test»: enter image description here

Любая помощь очень важна, я попыталсяиспользовать файловый менеджер и связывать основной путь, но пока не радует.

Это единственный код, который у меня есть на данный момент:

let fileManager = FileManager.default
let path = Bundle.main.urls(forResourcesWithExtension: "pdf", subdirectory: "Files/test")

print(path)

Я также пробовал этот код, но он печатает все ресурсыЯ не могу указать подкаталог:

let fm = FileManager.default
let path = Bundle.main.resourcePath!

do {
    let items = try fm.contentsOfDirectory(atPath: path)

    for item in items {
        print("Found \(item)")
    }
} catch {
    // failed to read directory – bad permissions, perhaps?
}

Исходя из ответа @vadian, папки были изменены из виртуальных групп в реальные папки.Используя следующий код, я смог получить список ресурсов:

let fileManager = FileManager.default
    let path = Bundle.main.resourcePath

    let enumerator:FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: "\(path!)/Files/test")!
    while let element = enumerator.nextObject() as? String {
        if element.hasSuffix("pdf") || element.hasSuffix("jpg") { // checks the extension
            print(element)
        }
    }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вы можете выполнить следующие шаги, чтобы получить их:

  1. Создайте новую папку в папке вашего проекта с расширением .bundle (например: Images.bundle ).
  2. Скопируйте файлы ресурсов в эту новую папку.
  3. Перетащите эту новую папку в проект, который открывается в Xcode.
  4. Получить URL-адреса, используя следующий фрагмент кода:

    let urls = Bundle.main.urls(forResourcesWithExtension: nil, subdirectory: "Images.bundle")
    

Видео с гидом также можно посмотреть здесь: https://youtu.be/SpMaZp0ReEo

0 голосов
/ 24 апреля 2018

Учтите, что желтые папки enter image description here являются виртуальными группами , а не реальными папками (хотя Xcode создает реальные папки в каталоге проекта). Все файлы в желтых папках перемещаются в каталог Resources в комплекте при сборке приложения.

Реальные папки в комплекте: enter image description here в навигаторе проекта.

...