Как удалить последний компонент пути строки в Swift?

У меня есть строка

11/Passion/01PassionAwakening.mp3

Мне нужно удалить последний компонент пути

 01PassionAwakening.mp3

то он выглядит как

11/Passion

Как это сделать?

и мне нужны оба компонента для моей потребности

Ответ 1

Вы можете разделить свой URL-адрес на две части. Ниже приводится

    let str  : NSString = "www.music.com/Passion/PassionAwakening.mp3" 
    let path : NSString = str.stringByDeletingLastPathComponent
    let ext  : NSString = str.lastPathComponent

    print(path)
    print(ext)

Выход

www.music.com/Passion
PassionAwakening.mp3

Для получения дополнительной информации, пожалуйста, посмотрите

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Strings/Articles/ManipulatingPaths.html

Ответ 2

Вы должны действительно покончить с унаследованными классами NS Objective-C и ручным разбиением строки пути, где это возможно. Вместо этого используйте URL:

let url = URL(fileURLWithPath: "a/b/c.dat", isDirectory: false)
let path = url.deletingLastPathComponent().relativePath // 'a/b'
let file = url.lastPathComponent // 'c.dat'

Ответ 3

Это также работает для Swift 3.0:

let fileName = NSString(string: "11/Passion/01PassionAwakening.mp3").lastPathComponent

Ответ 4

let str = "11/Passion/01PassionAwakening.mp3"
if !str.isEmpty {
    let components = str.characters.split("/")
    let head = components.dropLast(1).map(String.init).joinWithSeparator("/")
    let tail = components.dropFirst(components.count-1).map(String.init)[0]

    print("head:",head,"tail:", tail) // head: 11/Passion tail: 01PassionAwakening.mp3
} else {
    print("path should not be an empty string!")
}

Swift 4:

let components = path.split(separator: "/")
let directory = components.dropLast(1).map(String.init).joined(separator: "/")

Ответ 5

версия Swift 3.0

if !str.isEmpty {
        let components = str.characters.split(separator: "/")
        let head = components.dropLast(1).map(String.init).joined(separator: "/")
        let words = components.count-1
        let tail = components.dropFirst(words).map(String.init)[0]

        print("head:",head,"tail:", tail) // head: 11/Passion tail: 01PassionAwakening.mp3
    } else {
        print("path should not be an empty string!")
    }

Ответ 6

откат к NSString:

String Extension {

var ns: NSString {
    return self as NSString
}

var pathExtension: String {
    return ns.pathExtension
}

var lastPathComponent: String {
    return ns.lastPathComponent
}

var stringByDeletingLastPathComponent: String {
    return ns.deletingLastPathComponent
}

}

так что вы можете сделать:

let folderPath = pathString.stringByDeletingLastPathComponent