Get all URLs for resources in sub-directory in Swift

主宰稳场 提交于 2020-02-01 03:11:24

问题


I am attempting to create an array of URLs for all of the resources in a sub-directory in my iOS app. I can not seem to get to the correct path, I want to be able to retrieve the URLs even if I do not know the names (i.e. I don't want to hard code the file names into the code).

Below is a screen shot of the hierarchy, I am attempting to get all the files in the 'test' folder:

Any help is greatly appreciated, I have attempted to use file manager and bundle main path but to no joy so far.

This is the only code I have currently:

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

print(path)

I have also tried this code but this prints all resources, I can't seem to specify a sub-directory:

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?
}

Based on an answer from @vadian , The folders were changed from virtual groups to real folders. Using the following code I was able to get a list of resources:

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)
        }
    }

回答1:


Consider that the yellow folders are virtual groups, not real folders (although Xcode creates real folders in the project directory). All files in the yellow folders are moved into the Resources directory in the bundle when the app is built.

Real folders in the bundle are in the project navigator.




回答2:


You can follow the following steps to get them:

  1. Create a new folder inside your project folder with the extension is .bundle (for example: Images.bundle).
  2. Copy resource files into that new folder.
  3. Drag that new folder into the project that opening in Xcode.
  4. Retrieve the URLs by using the following code snippet:

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

You can also view the guide video here: https://youtu.be/SpMaZp0ReEo



来源:https://stackoverflow.com/questions/50004553/get-all-urls-for-resources-in-sub-directory-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!