FileManager.default.contentsOfDirectory return 在 iphone 8 中具有不同排序的数组
FileManager.default.contentsOfDirectory return array with different sorting in iphone 8
我正在尝试使用以下方法获取目录的内容。
let files: [String]? = try? FileManager.default.contentsOfDirectory(atPath: self.targetDirectory)
它在所有设备上都运行良好,但在 IPhone 8 的情况下,我得到了不同排序的结果。
例如,在 iPhone 7+ 的情况下,我得到以下结果。
Printing description of filterFiles:
▿ Optional<Array<String>>
▿ some : 2 elements
- 0 : "0.m4a"
- 1 : "1.m4a"
但是在 iPhone 8 的情况下,我得到以下结果:
Printing description of files:
▿ Optional<Array<String>>
▿ some : 2 elements
- 0 : "1.m4a"
- 1 : "0.m4a"
在这两种情况下,结果相同但排序不同。谁能帮我一下。
提前致谢。
NSFileManager
不对文件列表进行排序。但是您可以使用 array
的 sorted
方法自己完成。代码将如下所示:
let files: [String]? = try? FileManager.default.contentsOfDirectory(atPath: self.targetDirectory)
let sortedFiles = files?.sorted()
为了回答最初的问题,我建议将不可变的 属性 文件更改为可变的 属性:
var files: [String]? = try? FileManager.default.contentsOfDirectory(atPath: self.targetDirectory)
if files != nil {
files = files?.sorted()
}
使用Swift 5.5回答:
如果您只是想查找系统默认的按文件名排序的文件列表,您可以使用下面的 URL。 atPath 没有排序方法:FileManager 中的调用。使用此方法可提供要使用的 URL 列表。如果需要完整路径,可以使用 file[#].path 方法获取列表项的路径。
let targetDirectoryURL = URL(fileURLWithPath: self.targetDirectory)
do {
let files = try FileManager.default.contentsOfDirectory(at: targetDirectoryURL), includingPropertiesForKeys: nil, options: .skipsHiddenFiles).sorted { [=11=].path < .path }
} catch {
print("An error occurred: \(error)")
}
如果你想倒序排列,只需在闭包内改变顺序即可。
let files = try FileManager.default.contentsOfDirectory(at: targetDirectoryURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles).sorted { .path < [=12=].path }
我正在尝试使用以下方法获取目录的内容。
let files: [String]? = try? FileManager.default.contentsOfDirectory(atPath: self.targetDirectory)
它在所有设备上都运行良好,但在 IPhone 8 的情况下,我得到了不同排序的结果。
例如,在 iPhone 7+ 的情况下,我得到以下结果。
Printing description of filterFiles:
▿ Optional<Array<String>>
▿ some : 2 elements
- 0 : "0.m4a"
- 1 : "1.m4a"
但是在 iPhone 8 的情况下,我得到以下结果:
Printing description of files:
▿ Optional<Array<String>>
▿ some : 2 elements
- 0 : "1.m4a"
- 1 : "0.m4a"
在这两种情况下,结果相同但排序不同。谁能帮我一下。
提前致谢。
NSFileManager
不对文件列表进行排序。但是您可以使用 array
的 sorted
方法自己完成。代码将如下所示:
let files: [String]? = try? FileManager.default.contentsOfDirectory(atPath: self.targetDirectory)
let sortedFiles = files?.sorted()
为了回答最初的问题,我建议将不可变的 属性 文件更改为可变的 属性:
var files: [String]? = try? FileManager.default.contentsOfDirectory(atPath: self.targetDirectory)
if files != nil {
files = files?.sorted()
}
使用Swift 5.5回答:
如果您只是想查找系统默认的按文件名排序的文件列表,您可以使用下面的 URL。 atPath 没有排序方法:FileManager 中的调用。使用此方法可提供要使用的 URL 列表。如果需要完整路径,可以使用 file[#].path 方法获取列表项的路径。
let targetDirectoryURL = URL(fileURLWithPath: self.targetDirectory)
do {
let files = try FileManager.default.contentsOfDirectory(at: targetDirectoryURL), includingPropertiesForKeys: nil, options: .skipsHiddenFiles).sorted { [=11=].path < .path }
} catch {
print("An error occurred: \(error)")
}
如果你想倒序排列,只需在闭包内改变顺序即可。
let files = try FileManager.default.contentsOfDirectory(at: targetDirectoryURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles).sorted { .path < [=12=].path }