获取所有网址,在斯威夫特子目录资源

问题描述 投票:5回答:2

我试图在我的iOS应用程序来创建一个子目录的URL的所有资源的数组。我似乎无法得到正确的道路,我希望能够找回即使我不知道名字的网址(即我不想硬编码的文件名到代码中)。

下面是层次结构的屏幕截图,我试图得到“测试”文件夹中的所有文件: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)
        }
    }
ios swift xcode nsfilemanager subdirectory
2个回答
9
投票

考虑到黄色文件夹enter image description here是虚拟的群体,不是真正的文件夹(尽管在Xcode的项目目录中创建真正的文件夹)。在黄色文件夹中的所有文件都移动到被捆绑的Resources目录中的应用程序生成时。

在包的实际文件夹是在Project Navigator enter image description here


2
投票

您可以按照下面的步骤,让他们:

  1. 创建一个新的文件夹内与扩展项目文件夹是.bundle(例如:Images.bundle)。
  2. 资源文件复制到新的文件夹。
  3. 拖动新的文件夹成打开在Xcode项目。
  4. 检索使用下面的代码片段的网址: let urls = Bundle.main.urls(forResourcesWithExtension: nil, subdirectory: "Images.bundle")

您还可以在这里查看该指南视频:https://youtu.be/SpMaZp0ReEo

© www.soinside.com 2019 - 2024. All rights reserved.