You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历Bundle资源路径下的各目录,收集以nssl开头的图片文件?

解决方案

你需要先定位到content文件夹的具体路径,再递归遍历该目录下的所有文件,筛选出以nssl开头的图片文件。利用FileManager的目录枚举器可以轻松实现递归遍历,无需手动编写递归逻辑。

以下是完整实现代码:

// 存储目标文件路径的数组
var nsslImagePaths: [String] = []

let fm = FileManager.default
// 获取content文件夹的完整路径
guard let contentPath = Bundle.main.path(forResource: "content", ofType: nil) else {
    print("找不到content文件夹")
    return
}

do {
    // 创建递归遍历的目录枚举器
    guard let enumerator = fm.enumerator(atPath: contentPath) else {
        print("无法创建目录枚举器")
        return
    }
    
    // 遍历所有枚举到的文件/目录
    for case let filePath as String in enumerator {
        let fileName = (filePath as NSString).lastPathComponent
        // 筛选以nssl开头的图片文件(可根据实际格式调整扩展名列表)
        if fileName.hasPrefix("nssl") && ["png", "jpg", "jpeg", "gif"].contains((filePath as NSString).pathExtension.lowercased()) {
            let fullPath = (contentPath as NSString).appendingPathComponent(filePath)
            nsslImagePaths.append(fullPath)
        }
    }
    
    // 验证结果
    print("找到的nssl开头图片:\(nsslImagePaths)")
} catch {
    print("遍历目录出错:\(error.localizedDescription)")
}

代码说明

  • 定位文件夹:用Bundle.main.path(forResource:ofType:)直接获取content文件夹路径,比手动拼接更安全可靠。
  • 递归遍历:enumerator(atPath:)会自动遍历目标目录下的所有子目录和文件,省去手动递归的繁琐。
  • 筛选逻辑:先提取文件名判断是否以nssl开头,再通过扩展名过滤图片文件,可根据你的实际图片格式调整扩展名数组。
  • 安全处理:用guard let处理可选值,避免因路径不存在导致的崩溃。

如果需要获取文件URL而非字符串路径,可将代码替换为URL相关方法:

guard let contentURL = Bundle.main.url(forResource: "content", withExtension: nil) else {
    print("找不到content文件夹")
    return
}
// 后续用contentURL.appendingPathComponent(filePath)获取完整URL

内容的提问来源于stack exchange,提问作者multiverse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:01:29