将URL转换为String并再次返回

Gar*_*son 120 nsurl swift

所以我把一个转换成了NSURL一个String.所以如果我println看起来像file:///Users/...

后来我想把它作为一个,NSURL所以我尝试将其转换回来,如下所示,但是我丢失了上面的字符串版本中出现的两个正斜杠,这反过来破坏了代码,因为它url是无效的.

为什么我的转换回到NSURLString我给它的两个正斜杠中删除,我怎么能转换回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
Run Code Online (Sandbox Code Playgroud)

Nai*_*hta 128

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

URL(string: String)
Run Code Online (Sandbox Code Playgroud)

要么,

URL.init(string: "yourURLString")
Run Code Online (Sandbox Code Playgroud)

并将URL转换为String:

URL.absoluteString
Run Code Online (Sandbox Code Playgroud)

下面的一个将url的'contents'转换为string

String(contentsOf: URL)
Run Code Online (Sandbox Code Playgroud)

  • 第二部分是不正确的.`String(contentsOf:URL)`返回该资源的实际有效负载,而不是字符串格式的URL.使用`URL.absoluteString`获取URL的字符串版本.https://developer.apple.com/reference/foundation/nsurl/1409868-absolutestring (22认同)
  • 您犯的错误与/sf/answers/2797759681/相同,您将URL本身转换为字符串,并将下载的内容转换为字符串.您应该删除这部分答案,因为它完全错误(或偏离主题,但最终它是错误的,因为它没有回答问题). (4认同)
  • 超过 35 人发现这很有用并对其进行了投票,我宁愿保持原样。 (3认同)
  • 我使用 fileManager.fileExists(atPath: dbPath.absoluteString) 被烧毁,因为从 URL 的转换保留了转义的空格,如下所示:“Application%20Support”而不是“Application Support”,并且它返回 false。它没有对“dbPath.path”执行此操作。只是需要注意一些事情。 (2认同)

Mar*_*n R 111

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

let url = NSURL(string: urlstring)
Run Code Online (Sandbox Code Playgroud)

把它转换回来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
Run Code Online (Sandbox Code Playgroud)

  • 优秀.或者现在在Swift中:`URL(string:urlstring)` (9认同)

iph*_*aaw 67

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

let path:String = url.path
Run Code Online (Sandbox Code Playgroud)

  • 但它只返回`/ questions/27062454/converting-url-to-string-and-back-again` for url`/sf/ask/1894371811/背again` (5认同)
  • 如果您想将路径用于其他一些需要字符串路径的 FileManager 方法,这实际上非常有用。他们不喜欢“file://”格式。 (2认同)

Rog*_*ger 24

更新:注意网址,在这个例子中可以是零.您可以将您的网址包装在引号中以将其转换为字符串

let urlString = "http://ifconfig.me"
//string to url
let url = NSURL(string: urlString)
//url to string
let string = "\(url)"
Run Code Online (Sandbox Code Playgroud)


And*_*rew 21

2020 | 斯威夫特 5.1:

从 STRING 到 URL:

//ver 1
let url = URL(fileURLWithPath: "//Users/Me/Desktop/Doc.txt")

//ver 2
let url = URL(string:"//Users/Me/Desktop/Doc.txt")

//for folders
let url = URL(fileURLWithPath: "//Users/Me/Desktop", isDirectory: true)
Run Code Online (Sandbox Code Playgroud)

从 URL 到 STRING:

let a = String(describing: url)       // "file:////Users/Me/Desktop/Doc.txt"
let b = "\(url)"                      // "file:////Users/Me/Desktop/Doc.txt"
let c = url.absoluteString            // "file:////Users/Me/Desktop/Doc.txt"
let d = url.path                      // "/Users/Me/Desktop/Doc.txt" 
Run Code Online (Sandbox Code Playgroud)

但是d由于调试过程,的值将不可见,所以......

本地文件的最佳解决方案是:

let e = "\(url.path)"                 // "/Users/Me/Desktop/Doc.txt"
Run Code Online (Sandbox Code Playgroud)

网络地址的最佳解决方案是:

let c = url.absoluteString
Run Code Online (Sandbox Code Playgroud)

.path将仅返回 /questions/27062454/converting-url-to-string-and-back-againhttp(s) url, /sf/ask/1894371811/ 因此对于 http(s) url 更好地使用url.absoluteString


小智 14

let url = URL(string: "URLSTRING HERE")
let anyvar =  String(describing: url)
Run Code Online (Sandbox Code Playgroud)


Vit*_*lii 13

Swift 3(忘了NSURL).

let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"
Run Code Online (Sandbox Code Playgroud)

要从字符串中创建URL:

let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
//  ? some : file:///var/mobile/someLongPath
Run Code Online (Sandbox Code Playgroud)

如果我们要添加文件名.注意,appendingPathComponent()会自动添加百分比编码:

let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
//  ? some : file:///var/mobile/someLongPath/20-01-2017%2022:47
Run Code Online (Sandbox Code Playgroud)

当我们想要String而没有root部分时(注意自动删除百分比编码):

let folderWithFilename: String? = folderWithFilename.path
// ? Optional<String>
//  - some : "/var/mobile/someLongPath/20-01-2017 22:47"
Run Code Online (Sandbox Code Playgroud)

如果我们想要保留根部分,我们会这样做(但请注意编码百分比 - 它不会被删除):

let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ? Optional<String>
//  - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"
Run Code Online (Sandbox Code Playgroud)

要手动添加字符串的百分比编码:

let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ? Optional<String>
//  - some : "/var/mobile/someLongPath/20-01-2017%2022:47"
Run Code Online (Sandbox Code Playgroud)

要删除百分比编码:

let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ? Optional<String>
//  - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"
Run Code Online (Sandbox Code Playgroud)

百分比编码很重要,因为网络请求的URL需要它们,而文件系统的URL并不总是有效 - 它取决于使用它们的实际方法.这里需要注意的是,它们可能会被自动删除或添加,因此请仔细调试这些转换.


mri*_*011 9

Swift 3版本代码:

let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)
Run Code Online (Sandbox Code Playgroud)


and*_*ndy 5

斯威夫特 5.

将 a 转换String为 a URL

let stringToURL = URL(string: "your-string")
Run Code Online (Sandbox Code Playgroud)

将 a 转换URL为 a String

let urlToString = stringToURL?.absoluteString
Run Code Online (Sandbox Code Playgroud)