【问题标题】:Reading in array of elements from macOS directory从 macOS 目录中读取元素数组
【发布时间】:2018-03-26 19:58:32
【问题描述】:

我可以通过这种方式读取上传到 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/

【问题讨论】:

  • 那么,您将如何访问/Users/me/Desktop/A/Singe/File.txt
  • 让 url = URL(fileURLWithPath: "/Users/me/Desktop/A/Single/File.txt")
  • 好。现在,给定一个n: Int = 123,你将如何使用n访问/Users/me/Desktop/A/Single/File123.txt
  • 这就是我的问题!
  • 我的意思是n = 123的具体情况。如何将 int 123 放在该路径中,以便可以从中初始化 URL

标签: swift macos swift4


【解决方案1】:

首先,您的第二种方式非常昂贵,电影 URL 数组从捆绑中读取了一百次。这样更有效率:

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) }

我建议不要使用map,而是使用Array extension adding shuffle()

【讨论】:

  • 非常感谢@vadian。但是如何使用 FileManager 使用.reversed() 方法?
  • 结果是一个数组。您可以使用任何函数数组响应,其中包括.reverse
  • 放在哪里?这对我来说是不熟悉的语法。
  • FileManager 行末尾...options: [.skipsHiddenFiles]).reversed()
  • 该死!非常感谢! ))
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多