将 URL 转换为 String 并再次返回

所以我把 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
277876 次浏览

fileURLWithPath()用于将普通文件路径(例如“/path/to/file”)转换为 URL。您的 urlString是一个包含方案的完整 URL 字符串,因此您应该使用

let url = NSURL(string: urlstring)

例如:

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

注意 : 请注意网址,它是 optional,可以是 nil。 您可以将 url 包装在引号中,以便将其转换为字符串。你可以在操场上测试。
Swift 5和 Xcode 11的更新:

import Foundation


let urlString = "http://ifconfig.me"
// string to url
let url = URL(string: urlString)
//url to string
let string = "\(url)"
// if you want the path without `file` schema
// let string = url.path

有一种更好的方法可以从 Swift 中的 NSURL 获得路径的字符串版本:

let path:String = url.path

Swift 5Swift 4和 < strong > Swift 3中 将字符串转换为 URL:

URL(string: String)

或者,

URL.init(string: "yourURLString")

并将 URL 转换为 String:

URL.absoluteString

将 url 的“内容”转换为 string下面的那个

String(contentsOf: 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

如果我们想要添加文件名。注意,那个附录 PathComponent ()会自动添加百分比编码:

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)

用于 UIWebViewCommittee should dStartLoadWith 的 Swift 3

  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
}


}
let url = URL(string: "URLSTRING HERE")
let anyvar =  String(describing: url)

2021 | SWIFT 5.1:

当地的道路

字符串-> 网址:

let url1 = URL(fileURLWithPath: "//Users/Me/Desktop/Doc.txt")
let url2 = URL(fileURLWithPath: "//Users/Me/Desktop", isDirectory: true)


// !!!!!NEVER DO THIS!!!!!!
let url3 = URL(string: "file:///Users/Me/Desktop/Doc.txt")!
// !!!!!NEVER DO THIS!!!!!!

网址-> 字符串:

let a = String(describing: url1)       // "file:////Users/Me/Desktop/Doc.txt"
let b = "\(url1)"                      // "file:////Users/Me/Desktop/Doc.txt"
let c = url1.absoluteString            // "file:////Users/Me/Desktop/Doc.txt"


// Best solution in most cases
let d = url1.path                      // "/Users/Me/Desktop/Doc.txt"

互联网网址

字符串-> 网址:

let url = URL(string: "https://stackoverflow.com/questions/27062454/converting-url-to-string-and-back-again")!

网址-> 字符串:

url.absoluteString // https://stackoverflow.com/questions/27062454/converting-url-to-string-and-back-again


url.path // /questions/27062454/converting-url-to-string-and-back-again

Swift 5.

String转换为 URL:

let stringToURL = URL(string: "your-string")

URL转换为 String:

let urlToString = stringToURL?.absoluteString