Преобразование URL в строку и обратно
так что я преобразовал NSURL до String.
Так что если я println похоже file:///Users/... etc.
позже я хочу, чтобы это вернулось как 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
8 ответов:
fileURLWithPath()используется для преобразования простого пути к файлу (например, "/path/to/file") в 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
на Swift 4 и Swift 3, чтобы преобразовать строку в URL:
URL(string: String)или
URL.init(string: "yourURLString")и преобразовать URL в строку:
URL.absoluteStringниже преобразует "содержимое" url-адреса в строку
String(contentsOf: URL)
есть более приятный способ получить строковую версию пути из NSURL в Swift:
let path:String = url.path
UPDATE: обратите внимание на url, он может быть равен нулю в этом примере. Вы можете обернуть свой url в цитату, чтобы преобразовать его в строку
let urlString = "http://ifconfig.me" //string to url let url = NSURL(string: urlString) //url to string let string = "\(url)"
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-адреса для файловой системы не всегда будут работать-это зависит от фактического метода, который их использует. Предостережение здесь заключается в том, что они могут быть удалены или добавлены автоматически, поэтому лучше тщательно отлаживать эти преобразования.
Swift 3 код версии:
let urlString = "file:///Users/Documents/Book/Note.txt" let pathURL = URL(string: urlString)! print("the url = " + pathURL.path)
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 } }
Comments