如何遍历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
相关产品推荐
相关产品推荐

