FileManager.default.contentsOfDirectory возвращает массив с различной сортировкой в 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"
В обоих случаях результаты одинаковы, но сортировка различна. Может ли кто-нибудь помочь мне об этом.
Заранее спасибо.
2 ответа
NSFileManager
не сортирует список файлов. Но вы можете сделать это самостоятельно, используя sorted
метод array
, Код будет выглядеть так:
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 { $0.path < $1.path }
} catch {
print("An error occurred: \(error)")
}
Если вы хотите, чтобы он отсортировался в обратном порядке, просто измените порядок внутри замыкания.
let files = try FileManager.default.contentsOfDirectory(at: targetDirectoryURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles).sorted { $1.path < $0.path }