Swift 3 (dimentica di NSURL).
let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
Per creare un URL da una stringa:
let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath
Se vogliamo aggiungere il nome file. Nota che appendingPathComponent () aggiunge automaticamente la codifica percentuale:
let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
// ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Quando vogliamo avere String ma senza la parte radice (attenzione che la codifica percentuale viene rimossa automaticamente):
let folderWithFilename: String? = folderWithFilename.path
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Se vogliamo mantenere la parte radice facciamo questo (ma attenzione alla codifica percentuale - non viene rimossa):
let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Per aggiungere manualmente la codifica percentuale per una stringa:
let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ▿ Optional<String>
// - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Per rimuovere la codifica percentuale:
let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ▿ Optional<String>
// - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
La codifica percentuale è importante perché gli URL per le richieste di rete ne hanno bisogno, mentre gli URL per il file system non funzioneranno sempre, dipende dal metodo effettivo che li utilizza. L'avvertenza qui è che possono essere rimossi o aggiunti automaticamente, quindi è meglio eseguire il debug di queste conversioni con attenzione.