Преобразование URL в строку и обратно
Итак, я преобразовал NSURL
в String
.
Поэтому, если я println
выглядит как file:///Users/...
и т.д.
Позже я хочу, чтобы это было как NSURL
, поэтому я пытаюсь преобразовать его, как показано ниже, но я теряю две из косых черт, которые появляются в строковой версии выше, что, в свою очередь, прерывает код как url
недействителен.
Почему мое преобразование возвращается к NSURL
удалению двух косых черт из String
, которые я ему даю, и как я могу преобразовать обратно в NSURL
, содержащий три косая черта?
var urlstring: String = recordingsDictionaryArray[selectedRow]["path"] as String
println("the url string = \(urlstring)")
// looks like file:///Users/........etc
var url = NSURL.fileURLWithPath(urlstring)
println("the url = \(url!)")
// looks like file:/Users/......etc
Ответы
Ответ 1
fileURLWithPath()
используется для преобразования пути обычного файла (например, "/путь/в/файл" ) к URL-адресу. Ваша urlString
- это полная строка URL, включая схему, поэтому вы должны использовать
let url = NSURL(string: urlstring)
чтобы преобразовать его обратно в NSURL
. Пример:
let urlstring = "file:///Users/Me/Desktop/Doc.txt"
let url = NSURL(string: urlstring)
println("the url = \(url!)")
// the url = file:///Users/Me/Desktop/Doc.txt
Ответ 2
Существует более удобный способ получения строковой версии пути из NSURL в Swift:
let path:String = url.path
Ответ 3
В Swift 4 и Swift 3
Чтобы преобразовать строку в URL:
URL(string: String)
или,
URL.init(string: "yourURLString")
И для преобразования URL в String:
URL.absoluteString
Нижеприведенное преобразует "содержимое" URL в строку
String(contentsOf: URL)
Ответ 4
ОБНОВЛЕНИЕ: обратите внимание на URL-адрес, в этом примере это может быть нуль.
Вы можете перенести свой url в цитату, чтобы преобразовать ее в строку
let urlString = "http://ifconfig.me"
//string to url
let url = NSURL(string: urlString)
//url to string
let string = "\(url)"
Ответ 5
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
Если мы хотим иметь 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-адреса в файловой системе не всегда работают - это зависит от фактического метода, который их использует. Опасность здесь заключается в том, что они могут быть удалены или добавлены автоматически, поэтому лучше отлаживайте эти преобразования.
Ответ 6
Код версии Swift 3:
let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)
Ответ 7
Swift 3 используется с UIWebViewDelegate shouldStartLoadWith
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let urlPath: String = (request.url?.absoluteString)!
print(urlPath)
if urlPath.characters.last == "#" {
return false
}else{
return true
}
}