Я работаю над приложением MacOS Swift, где мне нужно выполнить обход папки / файла. В этом конкретном случае мне нужно удалить первую часть пути к файлу ... то есть, если файл имеет путь MyFolder/MyItem, мне нужно, чтобы он просто читался как MyItem для целей отображения.

На основе ответов в этот ответ, я написал следующий код:

if fileString.hasPrefix("/") {
    fileString.remove(at: fileString.startIndex)
    print(fileString)
}

... где я удаляю любую часть fileString перед "/" включительно.

Однако на практике это, похоже, не работает .... MyFile/MyItem не изменяется на MyItem, остается как MyFile/MyItem.

1
narner 4 Янв 2018 в 22:49

1 ответ

Лучший ответ

Вы можете найти первый (или последний) символ косой черты и удалить все от начала строки до этого разделителя включительно, например:

var fileString = "My Volume/My Folder/My Item"
if let r = fileString.range(of: "/", options: .backwards) {
    fileString.removeSubrange(..<r.upperBound)
}
print(fileString) // My Item

Но если вы намерены извлечь имя файла (последний компонент пути) для отображения, для этой цели есть специальный метод:

let fileString = "My Volume/My Folder/My Item"
let displayName = FileManager.default.displayName(atPath: fileString)
print(displayName) // My Item

Другой метод -

let fileString = "My Volume/My Folder/My Item"
let baseName = URL(fileURLWithPath: fileString).lastPathComponent
print(baseName) // My Item

Который похож на предыдущий, но не локализует имя файла.

2
Martin R 4 Янв 2018 в 21:07