如何在Swift中删除String的最后一个路径组件?

SUD*_*UDI 17 ios swift

我有一个字符串

11/Passion/01PassionAwakening.mp3
Run Code Online (Sandbox Code Playgroud)

我需要删除最后一个路径组件

 01PassionAwakening.mp3
Run Code Online (Sandbox Code Playgroud)

那看起来像

11/Passion
Run Code Online (Sandbox Code Playgroud)

怎么办呢?

我需要两个组件

Dha*_*ngh 23

您可以将您的网址分为两部分.以下给出

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

    print(path)
    print(ext)
Run Code Online (Sandbox Code Playgroud)

产量

www.music.com/Passion
PassionAwakening.mp3
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请查看

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


Eri*_*ner 12

您应该尽可能地删除旧的NSObjective-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'
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案,但要小心!请注意,例如,文件名中是否包含空格(即使它们以前面的反斜杠进行了转义),URL(fileURLWithPath:`也会为每个空格替换“%20`”(并注意使用URL(string:`代替)将会立即失败!)...此外,如果您路径中的任何目录名称包含空格或特殊字符,请记住,它们也会被“转义百分比”。 (2认同)
  • 如果您想加倍努力,请使用URL(fileURLWithPath:,isDirectory :)来避免额外的文件系统访问,以检查URL是否指向目录。从文档:`此功能避免了额外的文件系统访问,以检查文件URL是否为目录。如果您已经知道答案,则应该使用它。 (2认同)

Fra*_*kie 6

这适用于Swift 3.0:

let fileName = NSString(string: "11/Passion/01PassionAwakening.mp3").lastPathComponent
Run Code Online (Sandbox Code Playgroud)


use*_*734 5

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!")
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特4:

let components = path.split(separator: "/")
let directory = components.dropLast(1).map(String.init).joined(separator: "/")
Run Code Online (Sandbox Code Playgroud)