Швидкий 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
Коли ми хочемо мати String, але без кореневої частини (зверніть увагу, що відсоткове кодування видаляється автоматично):
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-адреси файлової системи не завжди працюватимуть - це залежить від фактичного методу, який їх використовує. Тут заперечення полягає в тому, що вони можуть бути видалені або додані автоматично, тому краще ретельно відладкуйте ці конверсії.