繁体   English   中英

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

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

我正在 Swift 中使用自定义表情符号键盘,但无法在名为“表情符号”的文件夹引用中查找和计算图像。

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

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

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

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

这打印为零。 我也试过“EmojiBoard/emojis”和“/EmojiBoard/emojis”。

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

谢谢!

PS 请注意,我使用 Swift 进行编码,而不是 Objective C。恐怕我不够熟练,无法将 C 编程转换为 Swift。 DS

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

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 { $0.lastPathComponent.hasPrefix("emoji-") }.count
print(emojiCount)

在我的脑海中,无法访问 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])")
}

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

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

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

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

您的代码可能如下所示:

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 将文件夹名称附加到包的资源路径,如上面的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM