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

时间:2015-11-23 10:10:49

标签: ios swift

我有一个字符串

11/Passion/01PassionAwakening.mp3

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

 01PassionAwakening.mp3

然后它看起来像

11/Passion

怎么办?

我需要两个组件以满足我的需要

7 个答案:

答案 0 :(得分:22)

您可以将您的网址分为两部分。以下是

    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

答案 1 :(得分:9)

您应该尽可能地废弃遗留NS Objective-C类和手动路径字符串拆分。请改用URL

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

答案 2 :(得分:6)

这也适用于Swift 3.0:

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

答案 3 :(得分: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!")
}
斯威夫特4:

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

答案 4 :(得分:4)

Swift 3.0版

The value 'null' is not valid for To

答案 5 :(得分:1)

回滚到NSString:

扩展字符串{

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

答案 6 :(得分:0)

即兴创建URL字符串的解决方案。非常感谢ingconti

extension String {

    var ns: URL? {
        return URL.init(string: self)
    }

    var pathExtension: String {
        return ns?.pathExtension ?? ""
    }

    var lastPathComponent: String {
        return ns?.lastPathComponent ?? ""
    }

    var stringByDeletingLastPathComponent: String {
        return ns?.deletingLastPathComponent().absoluteString ?? ""
    }
}