Swift 3(忘记 NSURL)。
let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
用字符串创建 URL:
let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath
如果我们要添加文件名。请注意, appendingPathComponent() 会自动添加百分比编码:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
当我们想要字符串但没有根部分时(注意百分比编码被自动删除):
let folderWithFilename: String? = folderWithFilename.path
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017 22:47"
如果我们想保留根部分,我们这样做(但请注意百分比编码 - 它不会被删除):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
手动为字符串添加百分比编码:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
删除百分比编码:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
百分比编码很重要,因为网络请求的 URL 需要它们,而文件系统的 URL 并不总是有效 - 这取决于使用它们的实际方法。这里需要注意的是,它们可能会被自动删除或添加,因此最好仔细调试这些转换。