如何计算 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,如上面的代码。
我正在 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,如上面的代码。