我可以通过这种方式阅读在Xcode项目中上传的元素(图像或视频):
let photos = (1...9).map {
NSImage(named: NSImage.Name(rawValue: "000\($0)"))
}
或者像这样:
let videos = (1...100).map { _ in
Bundle.main.urls(forResourcesWithExtension: "mov", subdirectory: nil)![Int(arc4random_uniform(UInt32(100)))]
}
但是如何使用.map
方法从macOS目录中读取文件(作为数组)?
/Users/me/Desktop/ArrayOfElements/
答案 0 :(得分:1)
首先,你的第二种方式非常昂贵,电影网址数组从包中读取了一百次。这更有效:
let resources = Bundle.main.urls(forResourcesWithExtension: "mov", subdirectory: nil)!
let videos = (1...100).map { _ in
resources[Int(arc4random_uniform(100))]
}
只有当应用程序不沙箱时才能从/Users/me/Desktop
读取,否则您只能从应用程序容器中读取。
要从目录中获取所有文件([URL]
),请使用FileManager
:
let url = URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Desktop/ArrayOfElements")
do {
let fileURLs = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles])
let movieURLs = fileURLs.filter{ $0.pathExtension == "mov" }
print(movieURLs)
} catch { print(error) }
如果目录包含子目录并且您不想要浅层枚举,请同时传递.skipsSubdirectoryDescendants
。
我建议不要使用map
来实施Array extension adding shuffle()