将URL转换为string,然后再返回

所以我已经将一个NSURL转换为一个String 。 所以,如果我println它看起来像file:///Users/...

后来我想把它作为一个NSURL所以我尝试将其转换回来,如下所示,但是我丢失了上面string版本中出现的两个正斜杠,这反过来又破坏了代码,因为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 

fileURLWithPath()用于将一个纯文件path(例如“/ path / to / file”)转换为一个URL。 你的urlString是一个完整的URLstring,包括scheme,所以你应该使用

 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中从NSURL获取string版本的path有一个更好的方法:

 let path:String = url.path 

Swift 4Swift 3中要将String转换为URL:

 URL(string: String) 

要么,

 URL.init(string: "yourURLString") 

并将URL转换为string:

 URL.absoluteString 

下面的一个将URL的“内容”转换为string

 String(contentsOf: URL) 

更新:注意的URL,它可以在这个例子中为零。 您可以将您的url包裹在报价中,将其转换为string

 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" 

要从一个string中创build一个URL:

 let folder: URL? = Foundation.URL(string: folderString) // Optional<URL> // ▿ some : file:///var/mobile/someLongPath 

如果我们想要添加文件名。 请注意,appendixPathComponent()自动添加百分比编码:

 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" 

手动添加string的百分比编码:

 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" 

百分比编码很重要,因为networking请求的URL需要它们,而到文件系统的URL并不总是工作 – 这取决于使用它们的实际方法。 这里的警告是,他们可能会被删除或自动添加,所以更好地仔细debugging这些转换。

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 } }