访问URL路径Swift时删除字符串的部分

时间:2018-04-30 23:00:59

标签: swift

我目前正试图在路径上创建歌曲列表 " /音乐/ iTunes / iTunes媒体/音乐"最终将它们插入到Youtube API中。 我可以访问所有需要的文件。我正在寻找一种清理打印物品的方法,如下图所示,专辑名称位于歌曲名称的前面。

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

有没有办法删除那部分?为了返回例子 "学家Cole 12 Love Yourz.mp3"

2 个答案:

答案 0 :(得分:0)

在Swift中,您应该使用URL而不是路径来引用文件。因此,使用subpathsOfDirectory' s 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的{​​{1}}属性来获取文件名而不使用其余路径。对表示专辑的目录执行相同操作,您可以将专辑名称和曲目名称拼接在一起以获得所需内容。

答案 1 :(得分:0)

以下是一种过滤和组合您从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)

输出:

  

学家Cole 12 Love Yourz.mp3
  J. Cole 06 Fire Squad.mp3
  J. Cole 09 No Role Modelz.mp3