ディレクトリを指すURL。
print(URL.documentsDirectory)
ファイルを指すURL。
print(URL.documentsDirectory.appending(component: "new.txt"))
ちょっと分かりづらいので置き換えて。
👉 【Swift】ファイルやディレクトリのパスが長すぎていやだ - URL.shortPath()
print(URL.documentsDirectory.shortPath())
// /HOME/Documents/
print(URL.documentsDirectory.appending(component: "new.txt").shortPath())
// /HOME/Documents/new.txt
そもそも、URL.path()
は、
URLが
ディレクトリを指す場合は path() の末尾は「/ (スラッシュ)」
というきまりがありますね。
そこで、文字列の分割を2つの関数でやってみます。
let path = URL.documentsDirectory.shortPath()
print(path.split(separator: "/"))
print(path.components(separatedBy: "/"))
// ["HOME", "Documents"]
// ["", "HOME", "Documents", ""]
そんな違いがありますので components(separatedBy:)
を使って、
let urlPath = URL.documentsDirectory.shortPath()
let components = urlPath.components(separatedBy: "/")
print("urlPath:", urlPath)
print("path:", components.dropLast().joined(separator: "/") + "/")
print("file:", components.last!)
// urlPath: /HOME/Documents/
// path: /HOME/Documents/
// file:
let urlPath = URL.documentsDirectory.appending(component: "new.txt").shortPath()
let components = urlPath.components(separatedBy: "/")
print("urlPath:", urlPath)
print("path:", components.dropLast().joined(separator: "/") + "/")
print("file:", components.last!)
// urlPath: /HOME/Documents/new.txt
// path: /HOME/Documents/
// file: new.txt
よって、components(separatedBy:)
を使った場合、
最終の文字列は、
URLがディレクトリを指してる場合 → 空文字
URLがファイルを指してる場合 → ファイル名
ということになります、
という APIの仕様と既存関数の特性を使った文字列分割でした。
そもそもは、
URL.pathComponents
や
URL.lastPathComponent
では、ディレクトリかファイルかの区別がない。
ということからこんなことをやってしまいました。
🤔 参考