如何计算 swift 中文件夹引用中的图像数量

How do I count a number of images in a folder reference in swift

我正在 Swift 中使用自定义表情符号键盘,但在名为 "emojis" 的文件夹引用中查找和计算图像时遇到问题。

编辑:澄清我的问题是让内容总是以 nil 结束。

.xcodeproj 文件位置的结构如下所示: EmojiBoard/emojis/emoji-0.png 等等。

我一直在尝试使用 NSFileManager,但没有成功。

let fileManager = NSFileManager.defaultManager()
let contents = fileManager.contentsOfDirectoryAtPath("emojis", error: &error)
println(contents)

这会打印出 nil。我也试过 "EmojiBoard/emojis" 和“/EmojiBoard/emojis”。

我需要这个来确定有多少图像并将它们全部循环出来,而不必求助于疯狂的 switch 语句或类似的东西。

谢谢!

P.S。请注意,我在 Swift 中编码,而不是 Objective C。恐怕我还不够熟练,无法将 C 编程转换为 swift。 D.S.

根据我的想法,无法访问 IDE 来测试此代码,我估计是这样的:

let fileManager = NSFileManager.defaultManager()


let contents = fileManager.contentsOfDirectoryAtPath(path, error: &error)


for var index = 0; index < contents.count; ++index {
    println("File is \(contents[index])")
}

如果您将上面的 'path' 替换为您的文档目录,此代码应遍历整个文件夹并打印出所有文件。

如果您只想计算项目的数量,请执行以下操作:

println("count is \(contents.count)")

如果您在将文件夹添加到项目时创建了文件夹引用,请像这样使用它(表情符号文件夹图标是一个蓝色文件夹):

let resourceURL = Bundle.main.resourceURL!.appendingPathComponent("emojis")
var resourcesContent: [URL] {
    (try? FileManager.default.contentsOfDirectory(at: resourceURL, includingPropertiesForKeys: nil)) ?? []
}
let emojiCount = resourcesContent.count
print(emojiCount)

如果您在将文件夹添加到项目时创建了组,请像这样使用它(表情符号文件夹图标是一个黄色文件夹):

let resourceURL = Bundle.main.resourceURL!
let resourcesContent = (try? FileManager.default.contentsOfDirectory(at: resourceURL, includingPropertiesForKeys: nil)) ?? []
let emojiCount = resourcesContent.filter { [=11=].lastPathComponent.hasPrefix("emoji-") }.count
print(emojiCount)

问题(或至少是问题的主要部分)是你的路径。您不能传入只是文件名的路径。您需要一个绝对路径,指向您的应用程序可用的沙盒目录之一,例如文档目录。

您的代码可能如下所示:

let  documentsDir = NSSearchPathForDirectoriesInDomains(   
  NSSearchPathDirectory.DocumentDirectory,
  NSSearchPathDomainMask.UserDomainMask,
  true)[0] as! NSString
let emojisPath = documentsDir.stringByAppendingPathCompnent("emojis")
let contents = fileManager.contentsOfDirectoryAtPath(emojisPath, 
  error: &error)
println(contents)

(如果你的 emojis 文件夹在你的应用程序的文档文件夹中,那将有效。如果你的表情符号在你的应用程序包中(内置在应用程序中),你将需要完全使用不同的代码(使用 NSBundle 函数来获取包内目录的路径)。

编辑:

如果您想在应用程序包中查找文件,请使用 NSBundle 方法 resourcePath,然后使用 stringByAppendingPathCompnent 将文件夹名称附加到包的 resourcePath,如上面的代码。