SwiftUI新手求助:Assets文件夹内图片名称获取返回空数组问题
为啥你的代码返回空数组?
Bundle.main.paths(forResourcesOfType:inDirectory:) 只能找项目里真实存在的文件系统文件夹,但你在Assets.xcassets里建的"folder"是资源分组,不是磁盘上的真实目录——编译后这些图片会被打包成一个叫Assets.car的文件,根本没法用文件路径的方式找到它们。
两种解决办法
办法1:把图片移到项目真实文件夹(新手首选)
- 在项目里新建一个文件夹(比如叫
ImagesFolder),选择「Folder Reference」(蓝色那种文件夹),把jpg图片拖进去,记得勾选「Copy items if needed」,还要确保关联到你的App target。 - 改代码里的目录名成这个真实文件夹的名字就行:
func getPhotoNames() -> [String] { let assetPaths = Bundle.main.paths(forResourcesOfType: "jpg", inDirectory: "ImagesFolder") print(assetPaths) return assetPaths.map { URL(fileURLWithPath: $0).deletingPathExtension().lastPathComponent } }
这样就能正常拿到图片名称数组了。
办法2:保留在Assets里,用Asset Catalog API获取(进阶)
如果必须把图片放在Assets的分组里,iOS 14及以上可以用系统的NSAssetCatalog来遍历资源,代码示例:
import UIKit func getAssetCatalogImageNames(inFolder folderName: String) -> [String] { guard let catalogURL = Bundle.main.url(forResource: "Assets", withExtension: "car") else { return [] } do { let catalog = try NSAssetCatalog(url: catalogURL) // 筛选出指定分组下的资源 let assets = catalog.assetNames.filter { $0.hasPrefix("\(folderName)/") } // 去掉分组前缀,只留图片名称 return assets.map { $0.replacingOccurrences(of: "\(folderName)/", with: "") } } catch { print("解析Asset Catalog失败: \(error.localizedDescription)") return [] } }
要是你需要兼容iOS 14以下的版本,这个办法就用不了了。
额外提醒
- 一定要确认图片的「Target Membership」已经勾选,不然打包的时候不会把图片放进App里。
- 用办法1的话,文件夹名字要和代码里
inDirectory的参数完全一致,大小写也不能错。
内容的提问来源于stack exchange,提问作者ole
相关产品推荐
相关产品推荐

