从macOS目录中读取元素数组

时间:2018-03-26 19:58:32

标签: swift macos swift4

我可以通过这种方式阅读在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/

1 个答案:

答案 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()