Swift 3 (olvídate de NSURL).
let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
Para hacer una URL de una cadena:
let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath
Si queremos agregar el nombre del archivo. Tenga en cuenta que appendingPathComponent () agrega el porcentaje de codificación automáticamente:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Cuando queremos tener String pero sin la parte raíz (preste atención a que la codificación porcentual se elimina automáticamente):
let folderWithFilename: String? = folderWithFilename.path
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Si queremos mantener la parte raíz, hacemos esto (pero tenga en cuenta el porcentaje de codificación, no se elimina):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Para agregar manualmente el porcentaje de codificación para una cadena:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Para eliminar el porcentaje de codificación:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
La codificación porcentual es importante porque las URL para las solicitudes de red las necesitan, mientras que las URL del sistema de archivos no siempre funcionan, depende del método real que las use. La advertencia aquí es que pueden eliminarse o agregarse automáticamente, por lo que es mejor depurar estas conversiones con cuidado.