如何在swift中计算文件夹引用中的多个图像
我正在使用Swift中的自定义表情符号键盘,我无法在名为“emojis”的文件夹引用中查找和计算图像。
编辑:澄清我的问题是让内容总是最终为零。
.xcodeproj文件位置的结构如下所示:EmojiBoard / emojis / emoji-0.png等等。
我一直试图使用NSFileManager没有运气。
let fileManager = NSFileManager.defaultManager() let contents = fileManager.contentsOfDirectoryAtPath("emojis", error: &error) println(contents)
这打印为零。 我也试过“EmojiBoard / emojis”和“/ EmojiBoard / emojis”。
我需要这个来确定有多少图像并将它们全部循环,而不必诉诸疯狂的开关语句或类似的东西。
谢谢!
PS请注意我在Swift中编码,而不是目标C.我不够精通将C编程转换为swift,我很害怕。 DS
如果您在将项目文件夹添加到项目时创建了文件夹引用,请使用它(emojis文件夹图标是蓝色文件夹):
let resourcePath = NSBundle.mainBundle().resourcePath!.stringByAppendingPathComponent("emojis") var resourcesContent : [NSURL] { return NSFileManager().contentsOfDirectoryAtPath(resourcePath , error: nil)! as! [NSURL] } let emojiCount = resourcesContent.count println(emojiCount)
如果您在将项目文件夹添加到项目时创建了组,请使用它(emojis文件夹图标是黄色文件夹):
let resourcePath = NSBundle.mainBundle().resourcePath! let resourcesContent = NSFileManager().contentsOfDirectoryAtPath(resourcePath , error: nil)! let emojiCount = NSFileManager().contentsOfDirectoryAtPath(resourcePath , error: nil)!.filter{ $0.lastPathComponent.hasPrefix("emoji-") }.count println(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])") }
如果将上面的'path'替换为文档目录,则此代码应遍历整个文件夹并打印出所有文件。
如果您只想要项目数,请执行以下操作:
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将文件夹名称附加到bundle的resourcePath,如上面的代码所示。