[英]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.