【问题标题】:How to get Assets.xcassets file names in an Array (or some data structure?)如何在数组(或某些数据结构?)中获取 Assets.xcassets 文件名
【发布时间】:2016-07-11 22:53:55
【问题描述】:

我正在尝试使用 Swift 迭代我放入 Assets 文件夹中的图像。我想遍历它们并稍后将它们插入到.nib 文件中,但到目前为止我找不到如何获得类似的东西:

let assetArray = ["image1.gif", "image2.gif", ...]

这可能吗?我一直在玩NSBundle.mainBundle(),但在这方面找不到任何东西。请告诉我。谢谢!

【问题讨论】:

  • 你是否建议我通过输入 30 次来加载 30 多张图片?我对 iOS 开发还很陌生,但这对我来说似乎很奇怪。

标签: ios swift


【解决方案1】:

Assets.xcassets 不是文件夹,而是包含使用 Assets.car 作为文件名的所有图像的存档。

如果你真的想阅读资产文件,那么你需要使用一些可以提取文件内容的库,例如one

或者你可以在你的项目中创建一个包并拖动你那里的所有图像。就我而言,我的项目中有 Images.bundle。要获取文件名,您可以执行以下操作:

let fileManager = NSFileManager.defaultManager()
let bundleURL = NSBundle.mainBundle().bundleURL
let assetURL = bundleURL.URLByAppendingPathComponent("Images.bundle")
let contents = try! fileManager.contentsOfDirectoryAtURL(assetURL, includingPropertiesForKeys: [NSURLNameKey, NSURLIsDirectoryKey], options: .SkipsHiddenFiles)

for item in contents
{
  print(item.lastPathComponent)
}

SWIFT 3/4 版本:

let fileManager = FileManager.default
let bundleURL = Bundle.main.bundleURL
let assetURL = bundleURL.appendingPathComponent("Images.bundle")

do {
  let contents = try fileManager.contentsOfDirectory(at: assetURL, includingPropertiesForKeys: [URLResourceKey.nameKey, URLResourceKey.isDirectoryKey], options: .skipsHiddenFiles)

  for item in contents
  {
      print(item.lastPathComponent)
  }
}
catch let error as NSError {
  print(error)
}

【讨论】:

  • 这正是我想要的。非常感谢!
  • 对于 Swift 3 或更高版本似乎已经过时了。今天怎么样了?
  • 我刚刚添加了Swift 3版本。
  • 非常酷。但它在try! 上为我崩溃,当我执行do catch 时,它会导致捕获此错误:The file “Images.bundle” couldn’t be opened because there is no such file.
  • 线程 1:致命错误:“尝试!”表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=256 “无法打开文件“Assets.car”。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
相关资源
最近更新 更多