将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 4和Swift 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 } }