Удаление части строки при доступе к URL-путям Swift - PullRequest
0 голосов
/ 01 мая 2018

Я сейчас пытаюсь создать список песен по пути "/ Music / Itunes / iTunes Media / Music", чтобы в конечном итоге вставить их в API YouTube. Я могу получить доступ ко всем нужным файлам. Я просто ищу способ очистить напечатанные элементы, как показано ниже, название альбома находится перед названием песни.

var test = try FileManager.default.subpathsOfDirectory (atPath: completePath)

let list = test.joined(separator: "\n")
// Attempt to delete album name  
print(list.replacingOccurrences(of: "/\(String())/" , with: ""))   

это печатает

J. Cole/2014 Forest Hills Drive
J. Cole/2014 Forest Hills Drive/12 Love Yourz.mp3
J. Cole/2014 Forest Hills Drive/06 Fire Squad.mp3
J. Cole/2014 Forest Hills Drive/09 No Role Modelz.mp3

есть ли способ удалить эту часть? чтобы привести пример "J. Cole 12 Love Yourz.mp3"

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вот один способ отфильтровать и объединить пути, которые вы получаете от subpathsOfDirectory:

var test = try FileManager.default.subpathsOfDirectory (atPath: completePath)

var list = test.flatMap {
    let pathComps = $0.components(separatedBy: "/")
    return pathComps.count >= 3 ? pathComps[0] + " " + pathComps.last! : nil
}.joined(separator: "\n")

print(list)

Выход:

J. Коул 12 Love Yourz.mp3
J. Cole 06 Fire Squad.mp3
Дж. Коул 09 Нет роли Modelz.mp3

0 голосов
/ 01 мая 2018

В Swift вы должны использовать URL s, а не пути для ссылки на файлы. Итак, вместо subpathsOfDirectory используйте FileManager 'enumerator(at:includingPropertiesForKeys:options:errorHandler:). Перечислитель, возвращаемый этим методом, даст вам URL для каждого подпути в каталоге. К сожалению, DirectoryEnumerator немного Objective-C-ish в своем интерфейсе, это означает, что его элемент Any вместо URL, как вы ожидаете, но вы, тем не менее, можете получить доступ к URL следующим образом:

for each in enumerator {
    guard let eachURL = each as? URL, eachURL.pathExtension == "mp3" else { continue }

    let trackName = eachURL.lastPathComponent
    let albumName = eachURL.deletingLastPathComponent().deletingLastPathComponent().lastPathComponent

    print("\(albumName) \(trackName)")
}

Затем вы можете просто использовать свойство URL lastPathComponent, чтобы получить только имя файла без остатка пути. Сделайте то же самое для каталога, представляющего альбом, и вы можете сшить вместе название альбома и название трека, чтобы получить то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...